Java 程序无法在netbeans之外正确读取文本文件

Java 程序无法在netbeans之外正确读取文本文件,java,netbeans,Java,Netbeans,我在netbeans上遇到了一个奇怪的问题;我的程序需要读取csv文件并从中获取前两列。我正在使用opencsv进行解析。在我构建了我的程序并试图在netbeans之外运行jar之后,该程序的行为并没有达到应有的水平。经过大量的调试,试图找出问题所在,我已经设法缩小了问题的范围 我的程序应该从文本文件中读取汉字。在netbeans中,它做得非常好。但如果我尝试在netbeans之外运行它,就会发生两件事 1) 它没有读入正确的字符。如果我将读入的所有内容都输出到一个新的csv文件中,那么就不会得

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

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

1) 它没有读入正确的字符。如果我将读入的所有内容都输出到一个新的csv文件中,那么就不会得到汉字,而是得到如下字符:会和«ª。我的csv文件的第二列是英文的,可以正确地读写

2) 它不会读所有的行;当我计算读取的行数时,IDE中的数字是正确的。但除此之外,我还缺了大约100行

有人能帮我弄清楚为什么会发生这种事吗?我只学过英语,所以字符编码对我来说有点陌生。但我确实签入了netbeans,编码设置为utf-8

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

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

}
private void loadNames(){
Thread Thread=新线程(new Runnable(){
@凌驾
公开募捐{
试一试{
reader=新CSVReader(新文件读取器(文件));
字符串[]行;
而((line=reader.readNext())!=null){
map.put(第[0]行,第[1]行);
}
//调试代码
int计数器=0;
CSVWriter writer=new CSVWriter(新文件编写器(“test.txt”),
CSVWriter.NO_QUOTE_字符,
CSVWriter.NO_ESCAPE_字符,
System.getProperty(“line.separator”);
对于(Map.Entry:Map.entrySet()){
String[]String={entry.getKey(),entry.getValue()};
writer.writeNext(字符串);
计数器++;
}
showMessageDialog(null,计数器);
}捕获(FileNotFoundException ex){
ErrorHandler.displayError(“在文件夹数据中找不到ka_data.csv文件”);
}捕获(IOEX异常){
ErrorHandler.displayError(“readNext时出错”);
}
}
});
thread.start();
}

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

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

你能发布你的代码吗?我发布了读取文件的代码。你在中读取文件时是否尝试过手动设置字符集?我承认我从未使用过您正在引用的CSV库,但是如果您尝试使用
newCSVReader(newInputStreamReader(newFileInputStream(file),“UTF-8”)