diff --git a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java
index fbbfa34..7c2959b 100644
--- a/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java
+++ b/compiler/base/translator/src/main/java/org/onosproject/yang/compiler/translator/tojava/utils/JavaFileGeneratorUtils.java
@@ -397,13 +397,7 @@
                                           ERROR_MSG_FOR_GEN_CODE);
         }
 
-        boolean isFileCreated;
         try {
-            isFileCreated = file.createNewFile();
-            if (!isFileCreated) {
-                throw new IOException("Failed to create " + file.getName() +
-                                              " class file.");
-            }
             appendContents(file, className, genType, imports, pkg);
         } catch (IOException e) {
             throw new IOException("Failed to append contents in " + file.getName() +
@@ -431,13 +425,7 @@
                                           " is already generated for: " + name + "\n" +
                                           ERROR_MSG_FOR_GEN_CODE);
         }
-        boolean isFileCreated;
         try {
-            isFileCreated = file.createNewFile();
-            if (!isFileCreated) {
-                throw new IOException("Failed to create " + file.getName() +
-                                              " class file.");
-            }
             appendContents(file, genType, imports, curNode, name);
         } catch (IOException e) {
             throw new IOException("Failed to append contents in " + file.getName() +
diff --git a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/FileSystemUtil.java b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/FileSystemUtil.java
index a4d6c10..e91af13 100644
--- a/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/FileSystemUtil.java
+++ b/compiler/base/utils/src/main/java/org/onosproject/yang/compiler/utils/io/impl/FileSystemUtil.java
@@ -22,9 +22,6 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
 import static org.onosproject.yang.compiler.utils.UtilConstants.EIGHT_SPACE_INDENTATION;
 import static org.onosproject.yang.compiler.utils.UtilConstants.EMPTY_STRING;
 import static org.onosproject.yang.compiler.utils.UtilConstants.FOUR_SPACE_INDENTATION;
@@ -112,20 +109,15 @@
                                         boolean isClose)
             throws IOException {
 
-        List<FileWriter> fileWriterStore = new ArrayList<>();
 
-        FileWriter fileWriter = new FileWriter(inputFile, true);
-        fileWriterStore.add(fileWriter);
-        PrintWriter outputPrintWriter = new PrintWriter(fileWriter, true);
         if (!isClose) {
+            FileWriter fileWriter = new FileWriter(inputFile, true);
+            PrintWriter outputPrintWriter = new PrintWriter(fileWriter, true);
             outputPrintWriter.write(contentTobeAdded);
             outputPrintWriter.flush();
             outputPrintWriter.close();
         } else {
-            for (FileWriter curWriter : fileWriterStore) {
-                curWriter.flush();
-                curWriter.close();
-            }
+            // nothing to do
         }
     }
 
@@ -141,7 +133,7 @@
 
         if (file != null) {
             updateFileHandle(file, null, true);
-            if (toBeDeleted) {
+            if (toBeDeleted && file.exists()) {
                 boolean deleted = file.delete();
                 if (!deleted) {
                     throw new IOException("Failed to delete temporary file " + file.getName());
@@ -157,15 +149,7 @@
      * @throws IOException when failed to close the file handle
      */
     public static void closeFile(File file) throws IOException {
-
-        if (file != null) {
-            updateFileHandle(file, null, true);
-            boolean deleted = file.delete();
-            if (!deleted) {
-                throw new IOException("Failed to delete temporary file " +
-                                              file.getName());
-            }
-        }
+        closeFile(file, true);
     }
     // TODO follow coding guidelines in remaining of this file.
 }
