2015-11-09 3 views
1

Я столкнулся с странной проблемой с netbeans; моя программа должна прочитать файл csv и получить первые два столбца от него. Я использую opencsv для синтаксического анализа. После того, как я построил свою программу и попытался запустить банку за пределами netbeans, программа не вела себя так, как должна. После многого, много отладки, пытаясь выяснить, что происходит не так, мне удалось немного уменьшить проблему.Программа не читает текстовый файл должным образом за пределами netbeans

Моя программа должна читать кандзи из текстового файла. И он делает это очень хорошо, в то время как внутри 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(); 

} 
+0

Можете ли вы разместить свой код? –

+0

Я отправил код, который читает файл. – Aeleon

+1

Вы пытались вручную установить кодировку при чтении файла? Я признаю, что я никогда не использовал CSV-библиотеку, на которую вы ссылаетесь, но что произойдет, если вы попробуете 'новый CSVReader (новый InputStreamReader (новый FileInputStream (файл),« UTF-8 »));' Мне интересно, если это значение по умолчанию charset вопрос. –

ответ

2

Вы пытались вручную установить кодировку при чтении файла? Я подозреваю, что у вас есть проблема с кодировкой по умолчанию. Попытка:

new CSVReader(new InputStreamReader(new FileInputStream(file), "UTF-8")); 
Смежные вопросы