java.nio.charset.MalformedInputException:输入长度

时间:2018-08-15 12:12:58

标签: java

从文件中读取单词的代码会创建具有该名称的文件并写入内容,这与sw更改有关,直到最近才正常工作。更改了代码,字符集仍然出现错误

public class ForRwWr {

    public static void main(String[] args) {
        BufferedWriter bw = null;
        FileWriter fw = null;
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        try {
            BufferedReader in = new BufferedReader(new java.io.FileReader("F:\\words.txt"));
            String str;
            String fileName = "F:\\words.txt";
            List<String> lines = Files.readAllLines(Paths.get(fileName), Charset.defaultCharset());

            for (String Ad : lines) {
                String FILENAME = "F:\\" + Ad + ".html";

                try {
                    fw = new FileWriter(FILENAME);
                    bw = new BufferedWriter(fw);

                    bw.write("Orbital Science");
                    bw.write("Satellite Navigation");
                    bw.write("Satellite Navigation");
                    bw.write("Hongyan");
                } catch (IOException d) {
                    d.printStackTrace();
                } finally {

                    try {
                        if (bw != null)
                            bw.close();

                        if (fw != null)
                            fw.close();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }
        } catch (IOException d) {
            d.printStackTrace();
        } finally {

            try {
                if (bw != null)
                    bw.close();

                if (fw != null)
                    fw.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }

        }
    }
}

直到最近仍可正常使用,但现在出现错误

  

java.nio.charset.MalformedInputException:输入长度

更改了字符集,现在错误是

java.io.FileNotFoundException: F:\Wonderful         .html (The filename, directory name, or volume label syntax is incorrect)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
    at java.io.FileWriter.<init>(FileWriter.java:63)
    at html.ForRwWr.main(ForRwWr.java:36)
java.io.FileNotFoundException: F:\      .html (The filename, directory name, or volume label syntax is incorrect)
    at java.io.FileOutputStream.open0(Native Method)
    at java.io.FileOutputStream.open(FileOutputStream.java:270)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
    at java.io.FileWriter.<init>(FileWriter.java:63)
    at html.ForRwWr.main(ForRwWr.java:36)
BUILD SUCCESSFUL (total time: 2 seconds)

Wonderful和Android是文件中的单词,直到最近令人担忧为止,它所做的只是tooc用户输入,并将其写入文件名中,就像昨天所担心的来自文件有趣事物技术的单词一样!今天是worc还是已经消失

2 个答案:

答案 0 :(得分:2)

我认为问题是由UTF-8以外的其他字符集引起的。确保已读取的字符集后,将其设置在

 List<String> lines = Files.readAllLines(Paths.get(fileName), ---character set here---);

它可能是ISO-8859-1UTF-16。 但是,readerin对象(对象引用)在您的代码中似乎没用。

最后一点,最后的try-catch是完全重复的代码!

答案 1 :(得分:1)

您阅读了F:\words.txt两次:使用FileReader读一次-这是一个旧类,只能从当前平台读取默认的Charset.defaultCharset()。  对于本地文件,这是不可移植的。 然后使用Files.readAllLines作为UTF-8。

我的猜测是:

  • 在UTF-8中words.txt不是 ,然后您遇到了非ASCII文本的问题。

您可以使用以下方法进行测试:

List<String> lines = Files.readAllLines(Paths.get(fileName),
                 Charset.defaultCharset());
  • 或者您已经将words.txt转换(粘贴为);在此之前是ASCII,现在是特殊字符。

但是解决方案是将word.txt转换为UTF-8(因此所有语言和脚本都可以包含单词:例如façade和mañana。 NotePad ++ JEdit这样的编辑器可能会这样做。