Below is my code, it is intended to take two .ckl files, compare the two, add the new items and create a new merged file. The program executes correctly when run in Netbeans however, when executing the .jar the program doesn't appear to be encoding the file in UTF-8. I am rather new to programming and would like to know where or how I might need to be enforcing this encoding to take place?
** I have removed the Swing code and other lines so that only my method is shown, the method that does all of the comparing and merging.
public void mergeFiles(File[] files, File mergedFile) {      ArrayList<String> list = new ArrayList<String>();      FileWriter fstream = null;     BufferedWriter out = null;     try {         fstream = new FileWriter(mergedFile, false);         out = new BufferedWriter(fstream);       } catch (IOException e1) {         e1.printStackTrace();     }     // Going in a different direction. We are using a couple booleans to tell us when we want to copy or not. So at the beginning since we start     // with our source file we set copy to true, we want to copy everything and insert vuln names into our list as we go. After that first file      // we set the boolean to false so that we dont start copying anything from the second file until it is a vuln. We set to true when we see vuln     // and set it to false if we already have that in our list.      // We have a tmpCopy to store away the value of copy when we see a vuln, and reset it to that value when we see an </VULN>     Boolean copy = true;     Boolean tmpCopy = true;     for (File f : files) {         textArea1.append("merging files into: " + mergedFilePathway + "\n");         FileInputStream fis;         try {             fis = new FileInputStream(f); //                BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(mergedFile), "UTF-8"));             BufferedReader in = new BufferedReader(new InputStreamReader(fis));             String aLine;             while ((aLine = in.readLine()) != null) {                 // Skip the close checklist and we can write it in at the end                 if (aLine.trim().equals("</iSTIG>")) {                     continue;                 }                 if (aLine.trim().equals("</STIGS>")) {                     continue;                 }                 if (aLine.trim().equals("</CHECKLIST>")) {                     continue;                 }                 if (aLine.trim().equals("<VULN>")) {                     // Store our current value of copy                     tmpCopy = copy;                     copy = true;                     String aLine2 = in.readLine();                     String aLine3 = in.readLine();                     String nameLine = in.readLine();                      if (list.contains(nameLine.trim())) {                         textArea1.append("Skipping: " + nameLine + "\n");                         copy = false;                         while (!(aLine.trim().equals("</VULN>"))) {                             aLine = in.readLine();                         }                         continue; // this would skip the writing out to file part                     } else {                         list.add(nameLine.trim());                         textArea1.append("::: List is now :::");                         textArea1.append(list.toString() + "\n");                     }                     if (copy) {                         out.write(aLine);                         out.newLine();                         out.write(aLine2);                         out.newLine();                         out.write(aLine3);                         out.newLine();                         out.write(nameLine);                         out.newLine();                     }                 } else if (copy) {                     out.write(aLine);                     out.newLine();                 }                 // after we have written to file, if the line was a close vuln, switch copy back to original value                 if (aLine.trim().equals("</VULN>")) {                     copy = tmpCopy;                 }             }              in.close();         } catch (IOException e) {             e.printStackTrace();         }         copy = false;     }      // Now lets add the close checklist tag we omitted before     try {         out.write("</iSTIG>");         out.write("</STIGS>");         out.write("</CHECKLIST>");     } catch (IOException e) {         e.printStackTrace();     }      try {         out.close();     } catch (IOException e) {         e.printStackTrace();     }  }                                         
                UTF-8 Encoding in Notepad (Windows)Click File in the top-left corner of your screen. In the dialog which appears, select the following options: In the "Save as type" drop-down, select All Files. In the "Encoding" drop-down, select UTF-8.
In Java, the OutputStreamWriter accepts a charset to encode the character streams into byte streams. We can pass a StandardCharsets. UTF_8 into the OutputStreamWriter constructor to write data to a UTF-8 file.
Java has extensive, highly informative documentation. Keep it bookmarked. Refer to it first, whenever you have difficulty. You'll find it's frequently helpful.
In this case, the documentation for FileWriter says:
The constructors of this class assume that the default character encoding and the default byte-buffer size are acceptable. To specify these values yourself, construct an OutputStreamWriter on a FileOutputStream.
If you want to be sure your file will be written as UTF-8, replace this:
FileWriter fstream = null; BufferedWriter out = null; try {     fstream = new FileWriter(mergedFile, false);   with this:
Writer fstream = null; BufferedWriter out = null; try {     fstream = new OutputStreamWriter(new FileOutputStream(mergedFile), StandardCharsets.UTF_8); 
                        For those, who use FileWriter in order to append to an existing file, the following will work
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), StandardCharsets.UTF_8)) {      //code  } 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With