Java 将多个文件打印到csv
我目前正在写一个作业,它将多个文本文件(文件对象)与行结合在一起,然后用逗号分隔这些行,如:Java 将多个文件打印到csv,java,string,file,class,Java,String,File,Class,我目前正在写一个作业,它将多个文本文件(文件对象)与行结合在一起,然后用逗号分隔这些行,如: File1Line1, File2Line1 File1Line2, File2Line2 我想我只是对如何使用这些文件感到困惑。如何从每个文件中获取第一行(第二行、第三行等),同时处理具有不同行数的文件?非常感谢您对这一概念的任何帮助。如果您确定两个文件的行是一对一的映射,那么就很容易了 您可以使用两个BufferReader来读取这两个文件,只需迭代其中一个文件 有些代码如下: BufferedR
File1Line1, File2Line1
File1Line2, File2Line2
我想我只是对如何使用这些文件感到困惑。如何从每个文件中获取第一行(第二行、第三行等),同时处理具有不同行数的文件?非常感谢您对这一概念的任何帮助。如果您确定两个文件的行是一对一的映射,那么就很容易了 您可以使用两个BufferReader来读取这两个文件,只需迭代其中一个文件 有些代码如下:
BufferedReader reader1 = new BufferedReader(new FileReader(new File(pathOfFile1)));
BufferedReader reader2 = new BufferedReader(new FileReader(new File(pathOfFile2)));
BufferedWriter writer = new BufferedWriter(new FileWriter(new File(pathOfOutputCsvFile)));
String lineOfFile1 = null;
while((lineOfFile1 = reader1.readLine()) != null){
String lineOfFile2 = reader2.readLine();
//here, lineOfFile1 and lineOfFile2 are the same line number
//then some codes for combination
//...
}
//finally don't forget to close the readers and writer.
如果您不能确定这两个文件中的行是一对一的映射,那么您应该将它们全部读入内存并映射到内存中,然后将它们作为CSV文件输出。此代码一次仅直接引用RAM中每个文件中的一行,这意味着它应该在没有内存异常的情况下处理大型文件。在幕后,可能会占用比您看到的更多的内存,但它仍然不会因大文件而崩溃 代码的工作原理是每次从每个文件中读取一行,直到所有文件都为空。当文件的行数用完时,输出一个空字符串
void assignment(String outputFile, String... filenames){
PrintWriter writer = new PrintWriter(outputFile, "UTF-8");
Scanner scanners = new Scanner[filenames.length];
for(int i=0;i<filenames.length;i++){
Scanner scanner = new Scanner(new File(filenames[i]));
scanners[i] = scanner;
}
boolean running = true;
while(running){
boolean allEmpty = true;
StringBuilder csvLine = new StringBuilder();
for(int i=0;i<scanners.lengh;i++){
if(scanner.hasNextLine()){
String line = scanner.nextLine();
csvLine.append(line);
allEmpty=false;
}
if(i!=scanners.length-1) csvLine.append(",");
}
if(allEmpty)
running=false;
else
writer.println(csvLine.toString());
}
writer.close();
for(Scanner s : scanners) s.close();
}
或:
此代码未经测试,不处理异常。此代码将允许您从不匹配的文件中读取行,并将它们合并到单个CSV文件中。当文件的行数用完时,将只显示空字符串
这会让你知道如何准确地完成你的要求。对于大多数语言来说,逐行读取文件都很容易。以下是java中的一个示例: 从概念上讲,您应该先考虑一个算法,然后编写一些伪代码来进一步探索和理解它 对于此分配,一个选项是交替读取每个文件,一次读取一行,然后立即将其写入csv。第二种选择是将每一行存储在数据结构(如数组)中,并在末尾写入,但对于大型文件来说,这可能会很昂贵。您可以通过多种方式处理不同的文件长度,例如只写行而不单独写对应的行。下面是一些基于java的伪代码:
FileReader reader1 = FileReader("file1.text")
FileReader reader2 = FileReader("file2.text")
while(reader1.hasNextLine() || reader2.hasNextLine())
{
if(reader1.hasNextLine()) {
writeToCSV(reader1.nextLine());
}
if(reader2.hasNextLine() {
writeToCSV(reader2.nextLine());
}
writeToCSV("\r\n");
}
您可以找到大量关于实际方法调用的示例,但首先了解算法很重要。您能分享代码而不是分配吗?
String[] args = new String[]{"helloWorld.txt","fun.bin"};
assignment("output2.txt",args);
FileReader reader1 = FileReader("file1.text")
FileReader reader2 = FileReader("file2.text")
while(reader1.hasNextLine() || reader2.hasNextLine())
{
if(reader1.hasNextLine()) {
writeToCSV(reader1.nextLine());
}
if(reader2.hasNextLine() {
writeToCSV(reader2.nextLine());
}
writeToCSV("\r\n");
}