当前位置: 首页 > 面试题库 >

将FileWriter的编码设置为UTF-8 [重复]

邹祺然
2023-03-14
问题内容

这个问题已经在这里有了答案

使用FileWriter(Java)以UTF-8格式编写文件吗? (9个答案)

2年前关闭。

下面是我的代码,它打算获取两个.ckl文件,比较两个文件,添加新项目并创建一个新的合并文件。该程序在Netbeans中运行时可以正确执行,但是,当执行.jar时,该程序似乎未使用UTF-8编码文件。我对编程很陌生,想知道在什么地方或如何执行这种编码?

**我删除了Swing代码和其他行,以便仅显示我的方法,该方法完成所有比较和合并。

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();
    }

}

问题答案:

Java具有广泛的,内容丰富的文档。保留书签。遇到困难时,请先参考它。您会发现它经常有用。

在这种情况下,FileWriter的文档说:

此类的构造函数假定默认字符编码和默认字节缓冲区大小是可接受的。要自己指定这些值,请在FileOutputStream上构造一个OutputStreamWriter。

如果您要确保文件将以UTF-8格式编写,请替换为:

FileWriter fstream = null;
BufferedWriter out = null;
try {
    fstream = new FileWriter(mergedFile, false);

有了这个:

Writer fstream = null;
BufferedWriter out = null;
try {
    fstream = new OutputStreamWriter(new FileOutputStream(mergedFile), StandardCharsets.UTF_8);


 类似资料:
  • 问题内容: 下面是我的代码,它打算获取两个.ckl文件,比较两个文件,添加新项目并创建一个新的合并文件。该程序在Netbeans中运行时可以正确执行,但是,当执行.jar时,该程序似乎未使用UTF-8编码文件。我对编程很陌生,想知道在什么地方或如何执行这种编码? **我删除了Swing代码和其他行,以便仅显示我的方法,该方法完成所有比较和合并。 问题答案: Java具有广泛的,内容丰富的文档。保留

  • 问题内容: 他们在“ PHP Cookbook”中说(第589页),要将传出数据的char编码正确设置为utf-8,必须将配置编辑为utf-8。 但是,我在中找不到此配置。我是否应该简单地添加一行内容? 我有一个。如您所见(),目前尚未激活。我应该删除分号并将其设置为吗?这样可以处理默认编码吗? 我还发现了其他我不知道该怎么做的编码指令: 有什么原因为什么我不能简单地将它们全部替换为? 问题答案:

  • 控制台输出中的西里尔符号显示不正确。Jenkins正在Windows 7上运行Tomcat/8.5.11 Jenkins属性显示: file.encoding cp1251 sun.jnu.encoding cp1251 sun.stderr.encoding cp866 sun.stdout.encoding cp866 解决了:我在bin文件夹中创建了文件setenv.bat并设置java_o

  • 问题内容: 我正在尝试从http://api.freebase.com/api/trans/raw/m/0h47检索数据 正如您在文本中看到的那样,这里有一些唱歌: 。 当我尝试从页面获取源代码时,我会听到带有诸如此类的文字。 到目前为止,我已经尝试使用以下代码: 我究竟做错了什么? 我的整个代码: 问题答案: HTML页面采用UTF-8,并且可以使用阿拉伯字符等。但是Unicode 127以上的

  • 问题内容: 嗨,我有一个客户端正在尝试使用以下HTTP标头向我们发布: 但是,我们的Web应用程序防火墙会不断将其拾取并引发错误: 消息:[文件“ /etc/httpd/modsecurity.d/10_asl_rules.conf”] [行“ 45”] [id“ 340362”] [msg“ Atomicorp.com WAF规则:ModSecurity不支持内容编码并且无法检测到使用它攻击,因

  • 问题内容: 我有一个PHP脚本,名为: http://cyber- flick.com/apiMorpho.php?method=getMorphoData&word=kot 以纯文本显示一些数据: 如您所见,在适当的字符位置上有很多“忙碌”。我想做的是以某种方式显示此内容,以便人们在浏览器中看到正确的UTF-8字符。 您可以将其封装在HMTL标签中并以元UTF-8编码进行设置,但是由于将从该脚本