我仍然是Java的新手并且正在努力学习。我正在尝试用Java创建一个程序,它能够读取我在.CSV
驱动器中的C:\
文件,一旦读取,我希望它在评论之间将数据分成更新的.CSV
文件CSV
。
例如,我们有原始的CSV
数据文件,如下所示:
*File A
*Name, Address, City, Country, Zip
"John","123 Main Street","NY","USA","12345"
"Jane","456 Main Street","NY","USA","12345"
"Smith","789 Main Street","NY","USA","12345"
*File B
*Name, Address, City, Country, Zip
"Jose","123 Main Street","NY","USA","12345"
"Brandon","456 Main Street","NY","USA","12345"
"Mike","789 Main Street","NY","USA","12345"
*File C
*Name, Address, City, Country, Zip
"Kathy","123 Main Street","NY","USA","12345"
"Jai","456 Main Street","NY","USA","12345"
"Michael","789 Main Street","NY","USA","12345"
所以基本上我试图找到能够读取CSV
文件的东西,在*File
文件中查找CSV
的前缀,然后将能够创建新文件,其中包含介于两者之间的所有内容。例如:
CSV1:
*Name, Address, City, Country, Zip
"John","123 Main Street","NY","USA","12345"
"Jane","456 Main Street","NY","USA","12345"
"Smith","789 Main Street","NY","USA","12345"
CSV2:
*Name, Address, City, Country, Zip
"Jose","123 Main Street","NY","USA","12345"
"Brandon","456 Main Street","NY","USA","12345"
"Mike","789 Main Street","NY","USA","12345"
CSV3:
*Name, Address, City, Country, Zip
"Kathy","123 Main Street","NY","USA","12345"
"Jai","456 Main Street","NY","USA","12345"
"Michael","789 Main Street","NY","USA","12345"
我能够找到一些能够读取CSV
文件但却不知道如何划分它。以下是读取文件的代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class csvReader
{
public static void main(String[] args) throws FileNotFoundException
{
//Get scanner instance
Scanner scan = new Scanner(new File("C:\\Personal_Info.csv"));
//Set the delimiter used in file
scanner.useDelimiter(",");
//Get all tokens and store them in some data structure
//I am just printing them on the screen
while (scan.hasNext())
{
System.out.print(scan.next() + ",");
}
System.out.println("\n*************Process Complete*************");
//Close the scanner
scan.close();
}//End Main
}//End Class
您可以逐行查找行中的特定关键字,以确定您需要执行的操作。对于当前示例,您可以使用关键字“* File”来了解何时创建要写入数据的新文件。只记得你想要关闭以前的BufferedWriter,如果它当前正在写入另一个文件。试试这个
public static void main(String[] args) throws FileNotFoundException, IOException
{
Scanner scan = new Scanner(new File("C:\\Personal_Info.csv"));
int fileNumber = 0;
String csv = "CSV";
BufferedWriter writer = null;
while (scan.hasNextLine())
{
String line = scan.nextLine();
if(line.contains("*File"))
{
fileNumber++;
//check and make sure we close our previous writer
if(writer != null)
writer.close();
System.out.println("Creating a new file called: " + csv + fileNumber);
writer = new BufferedWriter(new FileWriter("C:\\" + csv + fileNumber));
}
else if(writer != null)
{
writer.write(line + "\n");
}
}
System.out.println("\n*************Process Complete*************");
//Close the scanner
scan.close();
if(writer != null)
writer.close();
}
尝试使用正则表达式拆分输入文件并将每个匹配项写入新的输出文件,如下所示......
Scanner sc = new Scanner(new File("C:\\Personal_Info.csv"));
sc.useDelimiter("\\*File.*\n");
int counter = 1;
while (sc.hasNext()) {
try( PrintWriter out = new PrintWriter( "CSV" + counter++ + ".txt")){
out.println( sc.next() );
}
}