#java #csv
#java #csv
Вопрос:
Это мой код
public double myMethod(String name)
{
double result = 0.0;
String path = "/Users/T/Desktop/Training/MyFolder/";
int maxColumn = 0;
BufferedReader br = null;
ArrayList findMaxColumn = new ArrayList();
String line = "";
try
{
br = new BufferedReader(new FileReader(path name));
while((line = br.readLine())!= null)
{
findMaxColumn.add(temp.split(",").length);
}
maxColumn = getMaxNumber(findMaxColumn);
CSVReader reader = new CSVReader(new FileReader(path name));
List<String[]> myData = reader.readAll();
for(int i = 0 ; i < maxColumn;i )
{
for (String[] lineData : myData)
{
String value= lineData[i];
Проблема в том, что у меня есть файл csv (сгенерированный другим методом и сохраненный в MyFolder), и когда я запускаю этот код, я получаю ошибку «ArrayIndexOutOfBoundsException: 1» при строковом значении = LineData[i] . Но, если я открою свой файл csv и нажму кнопку сохранения (или внесу некоторые изменения для значения, например, от 0 до 1 и т.д.) И закрою его перед запуском этого кода, тогда все будет хорошо, когда я его запущу. Это странно!!! Может ли кто-нибудь объяснить мне, почему я должен открыть файл csv и внести некоторые изменения (просто нажмите на кнопку сохранения или измените значение на другое), чтобы игнорировать проблему и как ее исправить?
Ответ №1:
Убедитесь, что ваша кодировка при сохранении файла совпадает с кодировкой, которую вы используете при чтении файла. Вполне может быть, что вы сохраняете, например, в UTF8 и читаете файл как UTF16.
Это соответствует тому, что вы описываете (если открыть и сохранить файл перед его чтением, тогда он работает), а также «ArrayIndexOutOfBoundsException: 1″» — показывает, что метод «split» не нашел разделителя (запятой), поэтому возвращает одну строку.
Это также помогло бы при использовании отладчика для проверки того, что находится в вашем массиве, который нужно добавить findMaxColumn
после разделения. Легче отлаживать, если вы используете локальную переменную для сохранения результата split
перед добавлением:
while((line = br.readLine())!= null)
{
String splitResult[]=temp.split(","); // easier to examine
findMaxColumn.add(splitResult);
}
Комментарии:
1. Спасибо за ваш ответ. Сейчас я проверю свою часть кодирования и сообщу вам.