程序无法在 Netbeans 外部正确读取文本文件



我在使用 netbeans 时遇到了一个奇怪的问题;我的程序需要读取一个 csv 文件并从中获取前两列。我正在使用opencsv进行解析。在我构建程序并尝试在 netbeans 外部运行 jar 后,该程序没有正常运行。经过大量的调试试图找出出了什么问题,我已经设法缩小了问题的范围。

我的程序应该从文本文件中读取汉字。它在netbeans内部做得很好。但是,如果我尝试在 netbeans 之外运行它,就会发生两件事。

1(它没有以正确的字符读取。如果我将我读入的所有内容输出到一个新的 csv 文件中,那么我得到的不是汉字,而是得到这样的字符:ä1/4š 和 髪。我的csv文件的第二列是英文的,可以正确读入和写出。

2(它不会读取所有行;当我计算正在读取的行数时,在 IDE 中,该数字是正确的。但在它之外,我错过了大约 100 行左右。

谁能帮我弄清楚为什么会发生这种情况?除了英语,我从来没有用过任何东西,所以字符编码对我来说有点陌生。但我确实签入了netbeans,编码设置为utf-8。

编辑:注释中要求的代码。虽然我不知道这是否会有所帮助。变量映射是一个哈希映射。

private void loadNames() {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                reader = new CSVReader(new FileReader(file));
                String[] line;
                while ((line = reader.readNext()) != null) {
                    map.put(line[0], line[1]);
                }
//debug code
int counter = 0;
CSVWriter writer = new CSVWriter(new FileWriter("test.txt"), ',', 
CSVWriter.NO_QUOTE_CHARACTER, 
CSVWriter.NO_ESCAPE_CHARACTER, 
System.getProperty("line.separator"));
for(Map.Entry<String, String> entry : map.entrySet()){
String[] string = {entry.getKey(), entry.getValue()};
writer.writeNext(string);
counter++;
}
JOptionPane.showMessageDialog(null, counter);

            } catch (FileNotFoundException ex) {
                ErrorHandler.displayError("ka_data.csv file not found in    folder Data");
            } catch (IOException ex) {
                ErrorHandler.displayError("error at readNext");
            }
        }
    });
    thread.start();
}

您是否尝试过在读取文件时手动设置字符集?我怀疑您有默认字符集问题。尝试:

new CSVReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));

相关内容

  • 没有找到相关文章

最新更新