我有一个大的txt文件需要用java转换成csv格式,
我正在分析文件,但文件在一列中有一些长的nos,该列正在转换为指数。例如:891480000061119921953->8.9148e我需要将txt解析为csv,这样用excel打开的csv就不会转换为指数值
请查找以下代码:
public static String converter(String filename) throws Exception {
FileWriter writer = null;
if (filename.toString().endsWith("TXT")) {
File file = new File("C:\\convertertool\\inputFiles\\" + filename + "");
Scanner scan = new Scanner(file);
filename = filename.replace("TXT", "CSV");
File file2 = new File("C:\\convertertool\\ParsedFiles\\" + filename + "");
file.createNewFile();
writer = new FileWriter(file2);
while (scan.hasNext()) {
String csv = scan.nextLine().replace("|", ",");
System.out.println(csv);
writer.append(csv);
writer.append("\n");
writer.flush();
}
}
return filename;
}
2条答案
按热度按时间jchrr9hc1#
我可以帮你
trnvg8h32#
假设如下:
(1) 您想打开csv文件(例如。
test.csv
)在excel中,双击文件,使数据显示为数字序列(而不是使用科学符号)。(2) 您不希望在excel文件打开后对其执行任何手动格式化(例如,您不希望更改excel单元格格式)。
(3) 您不想使用excel手动导入向导。
我知道的唯一方法是将excel公式写入csv文件,而不是写入实际的、纯数字值。可以使用任何excel公式将数字转换为字符串。
例如,如果数值为:
然后csv文件需要包含以下内容(我添加了
field one
就为了这个演示):你可以将上面的内容粘贴到
test.csv
文件,并查看双击时会发生什么。excel中的结果如下:
在这种情况下,excel公式(如果直接在excel中创建)如下所示:
所以在csv文件中,我们必须用双引号将字段括起来,并且我们必须通过将双引号加倍来转义公式中的双引号。
这样做有一些缺点:
(a) 文本文件不再包含纯的、未更改的数据。它包含一个excel公式。因此,在excel之外,它或多或少是无用的。
(b) excel中的值是文本公式而不是数字(因此不能对其执行算术运算)。
(c) excel列宽不会自动调整大小,因此如果单元格c1中有任何数据,则单元格b1的显示将被截断(但全文仍将存在)。
(d) 现在您几乎肯定需要一个合适的JavaCSV解析库来确保生成有效的csv数据。
最后一个想法:如果最终结果需要在excel中查看(并且只能在excel中查看),那么您可能应该生成一个实际的excel文件(例如,使用apachepoi),而不是生成csv文件。