У меня странная проблема: у меня есть файл CSV, который я правильно читаю с помощью Блокнота и MS Excel 2010.
Я попытался прочитать строки этого файла с этим кодом:
BufferedReader source = new BufferedReader(new FileReader(fileName));
String currentRow = null;
while (null != (currentRow=source.readLine())){
System.outprintln(currentRow)
}
Когда программа запускается, я читаю только двоичные символы, и длина строки отличается от реальности (я ожидаю, что 2000 символов для строки и я нашел 55 символов или 1 символ).
Я работаю в Eclipse: если я открываю этот CSV-файл как текстовый редактор Я читаю странные символы, когда открываю его как системный редактор Я читаю правильное значение в MS Excel.
Тип этого файла: файл с разделенным запятыми значением Microsoft Excel : есть ли в этом файле некоторые двоичные символы?
Я пытался использовать Apache POI (чтение файла в CSV и в XLS) с этим кодом:
public void displayFromExcel (String xlsPath){
POIFSFileSystem fileSystem = null;
try{
fileSystem = new POIFSFileSystem (new FileInputStream (xlsPath));
HSSFWorkbook workBook = new HSSFWorkbook (fileSystem);
HSSFSheet sheet = workBook.getSheetAt (0);
Iterator<Row> rows = sheet.rowIterator();
while (rows.hasNext ()){
HSSFRow row = (HSSFRow) rows.next ();
System.out.println ("Row No.: " + row.getRowNum ());
Iterator<Cell> cells = row.cellIterator();
while (cells.hasNext ()){
HSSFCell cell = (HSSFCell) cells.next ();
System.out.println ("Cell No.: " + cell.getCellNum ());
switch (cell.getCellType ()){
case HSSFCell.CELL_TYPE_NUMERIC :
System.out.println ("Numeric value: " + cell.getNumericCellValue ());
break;
case HSSFCell.CELL_TYPE_STRING :
HSSFRichTextString richTextString = cell.getRichStringCellValue ();
System.out.println ("String value: " + richTextString.getString ());
break;
default :
System.out.println ("Type not supported.");
break;
}
}
}
} catch (IOException e) {
e.printStackTrace ();
}
}
Не работает, я получаю это сообщение на консоль:
java.io.IOException: Invalid header signature; read 0x003000310030FEFF, expected 0xE11AB1A1E011CFD0
at org.apache.poi.poifs.storage.HeaderBlockReader.<init>(HeaderBlockReader.java:125)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:153)
Когда он запускает эту инструкцию:
POIFSFileSystem fileSystem = new POIFSFileSystem (new FileInputStream (xlsPath));
Я пытался использовать библиотеку datafile и ввод-вывод Java (DataInputstream
и т. Д.), Но безуспешно.
Есть идеи для решения?