我正在尝试阅读HashMap
并写入CSV文件。我使用CSVPrinter
,但我的方法没有返回CSV文件。
这是我使用的代码: 已编辑的代码
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
public class SJV{
public File writeCSV(Map featureSet) throws IOException{
CSVFormat csvFileFormat = CSVFormat.DEFAULT.withRecordSeparator(NEW_LINE_SEPARATOR);
Map<String, Integer> map = featureSet;
File temp = File.createTempFile("tempfile", ".tmp");
FileWriter fs = new FileWriter(temp);
CSVPrinter csvFilePrinter = new CSVPrinter(fs, csvFileFormat);
//csvFilePrinter.printRecord(FILE_HEADER);
csvFilePrinter.printRecord(map.keySet().toArray());
csvFilePrinter.printRecord(map.values().toArray());
csvFilePrinter.close();
fs.close();
return temp;
}
}
这是我的测试:
public void testWriteCSV() throws IOException {
SJV sj = new SJV();
HashMap<String, Integer> hmap = new HashMap<String, Integer>();
hmap.put("Feature1", 1);
hmap.put("Feature2", 2);
File fs = sj.writeCSV(hmap);
if (fs.exists()){
Scanner input = new Scanner(fs );
while (input.hasNextLine())
{
System.out.println(input.nextLine());
}
input.close();
}
我真的不明白为什么该方法没有返回CSV文件。
答案 0 :(得分:2)
试试这个(在此代码中我将格式从.tmp更改为.csv)
一个问题是我们没有关闭csvFilePrinter - &gt; csvFilePrinter.close()和我从问题中理解的是用户期望CSV文件扩展名,因此,我在编写时使用了.csv扩展名。 :
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
public class TestMain {
public static void main(String args[]) {
HashMap<String, Integer> hmap = new HashMap<String, Integer>();
hmap.put("Feature11", 1);
hmap.put("Feature22", 2);
CSVFormat csvFileFormat = CSVFormat.DEFAULT.withRecordSeparator(System.lineSeparator());
Map<String, Integer> map = hmap;
File temp;
try {
temp = File.createTempFile("tempfile", ".csv");
FileWriter fs = new FileWriter(temp);
CSVPrinter csvFilePrinter = new CSVPrinter(fs, csvFileFormat);
csvFilePrinter.printRecord(map.keySet().toArray());
csvFilePrinter.printRecord(map.values().toArray());
csvFilePrinter.close();
System.out.println(" temp " + temp);
if (temp.exists()) {
Scanner input = new Scanner(temp);
while (input.hasNextLine()) {
System.out.println(input.nextLine());
}
input.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
根据评论中的建议进行编辑(此代码适用于我,此处为示例输出):
temp C:\Users\<MY USERNAME>\AppData\Local\Temp\tempfile7124969351872886823.csv
Feature11,Feature22
1,2
答案 1 :(得分:0)
尝试:
fs.flush();
fs.close();
csvFilePrinter.close();