Java FileWriter写入我的CSV的两个头
我的目标是创建一个方法,该方法提取任何由一些字符分隔的文件,解析出用户需要的字段(列),并将其写入另一个CSV文件。Jdoc是德国的,对此我很抱歉!代码如下:Java FileWriter写入我的CSV的两个头,java,file,csv,filewriter,Java,File,Csv,Filewriter,我的目标是创建一个方法,该方法提取任何由一些字符分隔的文件,解析出用户需要的字段(列),并将其写入另一个CSV文件。Jdoc是德国的,对此我很抱歉!代码如下: /** * Erstellt von einer beliebigen Datei über einen Seperator eine CSV Datei und * filtert die Felder raus die es zu suchen gilt * * * @param sourcePath Vollqual
/**
* Erstellt von einer beliebigen Datei über einen Seperator eine CSV Datei und
* filtert die Felder raus die es zu suchen gilt
*
*
* @param sourcePath Vollqualifizierter Quellpfad
* @param sourceSeperator Seperator für die Quelldatei
* @param destinationPath Vollqualifizierter Zielpfad
* @param destinationSeperator Seperator für die Zieldatei
* @param fields Felder die in die CSV Datei geschrieben werden sollen
* @throws FileNotFoundException
* @throws IOException
*/
private void createCSVFile(String sourcePath, char sourceSeperator, String destinationPath, char destinationSeperator, Set<String> fields) throws FileNotFoundException, IOException
{
CSVReader reader = new CSVReader(new FileReader(sourcePath), sourceSeperator);
FileWriter writer = new FileWriter(destinationPath);
String[] nextLine;
Set<Integer> validLines = new HashSet<Integer>();
int i = 0;
// TODO STWE: Schreibt leider noch 2 mal den Header ?!
while ((nextLine = reader.readNext()) != null)
{
if (i == 0)
{
int x = 0;
for (String row : nextLine)
{
if (fields.contains(row))
{
validLines.add(x);
//Write the Header
writer.append(row + destinationSeperator);
}
x++;
}
writer.append('\n');
}
if (!validLines.isEmpty())
{
for (Integer v : validLines)
{
//Write the Content
writer.append(nextLine[v] + destinationSeperator);
}
writer.append('\n');
}
i++;
}
writer.flush();
writer.close();
reader.close();
}
/**
*在CSV日期和
*镀金
*
*
*@param sourcePath Vollqualifizierter Quellpfad
*@param sourceseparator separator für die Quelldatei
*@param destinationPath Vollqualifizierter Zielpfad
*@param destinationSeperator分隔符für die Zieldatei
*@param fields Felder die CSV Datei geschrieben werden sollen
*@抛出FileNotFoundException
*@抛出异常
*/
私有void createCSVFile(字符串源路径、字符源分隔符、字符串目标路径、字符目标分隔符、集合字段)抛出FileNotFoundException、IOException
{
CSVReader reader=new CSVReader(新文件读取器(sourcePath),sourceseparator);
FileWriter writer=新的FileWriter(destinationPath);
字符串[]下一行;
Set validLines=new HashSet();
int i=0;
//待办事项:施赖特·莱德·诺赫2号马尔登头球?!
而((nextLine=reader.readNext())!=null)
{
如果(i==0)
{
int x=0;
用于(字符串行:下一行)
{
if(字段.包含(行))
{
有效线。添加(x);
//写标题
writer.append(行+目标计算器);
}
x++;
}
writer.append('\n');
}
如果(!validLines.isEmpty())
{
对于(整数v:有效线)
{
//写内容
writer.append(nextLine[v]+destinationSeperator);
}
writer.append('\n');
}
i++;
}
writer.flush();
writer.close();
reader.close();
}
也许你有一个更简单的方法 Node:im使用au.com.bytecode.opencsv.CSVReader进行我的提议。将
如果(!validLines.isEmpty())
更改为否则如果(!validLines.isEmpty())
reader.readNext()
不会返回一行,而是返回一个字符串[]
,表示文件当前行中以CSV分隔的令牌。在for..循环中使用此选项将导致在CSV的第一行中为每个令牌打印一次标题
for (String row : nextLine) //looping for each token in the first line
{
if (fields.contains(row))
{
validLines.add(x);
//Write the Header
writer.append(row + destinationSeperator);
}
x++;
}
如果您的CSV看起来像:
a,b,c
a,b
您将有三行标题。与您的问题无关:您应该习惯用英语编写代码注释,并且只使用英语,而不是其他语言。对于程序员来说,最令人沮丧的事情莫过于使用谷歌翻译来理解代码注释。相信我,我是凭经验说话的。