Java 从包含不可映射字符的文件中读取

Java 从包含不可映射字符的文件中读取,java,file-io,Java,File Io,我正在尝试使用文件和扫描仪来读取.txt文件,并将其中的有用信息捕获到一个单独的文件中。其中一些文件包含中文字符,导致我的扫描仪抛出以下错误“java.nio.charset.UnmappableCharacterException:”。中文字符并不重要,因此如何使扫描仪忽略中文字符并继续搜索文件的其余部分以获取有用信息 代码如下: try { File source = new File(this.parentDirectory + Fi

我正在尝试使用文件和扫描仪来读取.txt文件,并将其中的有用信息捕获到一个单独的文件中。其中一些文件包含中文字符,导致我的扫描仪抛出以下错误“java.nio.charset.UnmappableCharacterException:”。中文字符并不重要,因此如何使扫描仪忽略中文字符并继续搜索文件的其余部分以获取有用信息

代码如下:

            try {
                File source = new File(this.parentDirectory + File.separator + this.fileName.getText());
                Scanner reader = new Scanner(source);
                StringBuilder str = new StringBuilder();
                while (reader.hasNextLine()) {
                    str.append(reader.nextLine());
                    str.append("\n");
                }
                if (reader.ioException() != null) {
                    throw reader.ioException();
                }
                reader.close();
                this.input.setText(str.toString());
            } catch (FileNotFoundException e1) {
                JOptionPane.showMessageDialog(this, "File not found!");
                return;
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

扫描仪在外部字节序列和所有Java字符串使用的16位Unicode字符之间进行隐式转换

您需要知道用于外部数据(即文件内容)的实际编码。然后您将扫描仪声明为

  Scanner reader = new Scanner(file, charset);
如果操作正确,那么就不应该有“不可映射”字符

如果不显式指定字符集,则使用平台默认值,可能是UTF-8

或者,你似乎没有真正使用扫描仪到任何显著的程度;你只是用它来收集线路。您可以降低级别,使用FileInputStream以字节序列的形式读取文件,并使用您认为合适的任何启发式方法来确定文件的“有用”部分