У меня есть странная проблема: у меня есть файл CSV, что я правильно читать с Notepad и MS Excel 2010.Чтение двоичных символов из CSV файла
Я попытался читать строки этого файла с этим кодом:
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 d Java I/O (DataInputstream
и т. д.), но безуспешно.
Любая идея для решения?
Я бы предположил, что ваш заголовок файла Excel неверен, основываясь на ошибке, которую вы отправили – Adrian
0xfffe - это заголовок некоторого юникода, добавленный к некоторым текстовым файлам. – James