gpt4 book ai didi

java - 从 CSV 文件中读取二进制字符

转载 作者:行者123 更新时间:2023-12-01 15:33:21 33 4
gpt4 key购买 nike

我遇到了一个奇怪的问题:我有一个 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 I/O(DataInputstream 等),但没有成功。

有解决方案吗?

最佳答案

您需要使用比 FileReader 更复杂的东西来读取此文件。查看How to reliably guess encoding 。然后要么找到一些可以读取编码文件的东西,要么编写一些可以过滤掉垃圾的东西。我发现,如果您将文件视为纯 ASCII 并丢弃所有不是有效 ASCII 字符的内容,它将很好地读取纯 Unicode 文件(以及纯 ASCII 文件)。如果它是带有埃及象形文字的 UTF-8(并且您想要那些象形文字),则效果不太好。

所以首先尝试让“他们”为您提供更好的文件。如果这不起作用,请在 java.io Javadoc 中进行一些研究,然后进行一些编程。

关于java - 从 CSV 文件中读取二进制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9279458/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com