程序不能在netbeans之外正确读取文本文件

时间:2015-11-09 19:44:42

标签: java netbeans

我遇到了一个关于netbeans的奇怪问题;我的程序需要读取一个csv文件并从中获取前两列。我正在使用opencsv进行解析。在我构建我的程序并尝试在netbeans之外运行jar之后,该程序没有按预期运行。经过多次调试,试图弄清楚出了什么问题,我已经设法缩小了问题的范围。

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

1)它没有读成正确的字符。如果我把我读到的所有内容都输出到一个新的csv文件中,那么我得到的字符就像:会和髪而不是汉字。我的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();

}

1 个答案:

答案 0 :(得分:2)

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

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