簡體   English   中英

一次從一個文件讀取一行並寫入不同的文件

[英]Read one line at a time from a file and write to different files

如何一次從一個文件讀取一行並寫入不同的文件?

想知道如何一次讀取一行並寫入不同的文件。 谷歌搜索時找不到很好的例子:

例如,讀取具有以下內容的文本文件:sent1 sent2 sent3...。

將send1寫入1.txt,send2寫入2.txt,send3寫入3.txt

這似乎是一個簡單的操作,我的編碼有問題,不確定如何解決。

import java.util.*;
import java.io.*;

public class MyFunction {
public static void main(String args[])
throws IOException, ClassNotFoundException
{


   //variable initialization

  String strLine;
  int i = 0;
 //Read in a file and process one line at a time

   FileReader singleFile = new FileReader("C:\\data);
   BufferedReader reader = new BufferedReader(singleFile);
    for (int j=0; j < 12; j++) {
   FileWriter outFile = new FileWriter("C:\\doc" + i + ".txt");
   BufferedWriter writer = new BufferedWriter(outFile);     

    //Read one line at a time from the input file
   while ((strLine = reader.readLine()) !=null) {
   //process a string which is not empty

   if (strLine.length() > 0) {

   System.out.println("This is strLine: " + strLine);
   writer.write (strLine);

   i=i+1;
   System.out.println("This is i: " + i);

   } //end of if
   }


   singleFile.close();
   writer.close();

   } }}

最簡單的方法可能是在一個數組中打開n個FileWriters(每個輸出文件一個)(我將數組稱為“ writers”)。 設置一個計數器i =0。遍歷輸入行時,將當前行寫入writers [i],然后遞增i並設置i = i%n。 這將使我在0..n-1范圍內循環,這意味着您將以0,1,... n-1,0,1 ...的順序寫入文件,我認為這是您想要的。

您會陷入困境,直到文件完成。 取出while循環,並用if代替for循環。 那只會讓您獲得前12行。 之后,將for循環更改為while循環,然后手動遞增j,如果j> = 12,則將j設置為0。

下面的代碼循環了12個文件,這就是您想要的嗎?

import java.util.*;
import java.io.*;

public class MyFunction {
public static void main(String args[])
throws IOException, ClassNotFoundException
{


   //variable initialization

  String strLine;
  int i = 0;
   //Read in a file and process one line at a time

   FileReader singleFile = new FileReader("C:\\data);
   BufferedReader reader = new BufferedReader(singleFile);
   j = 0;
   while (true) { //loop forever
   FileWriter outFile = new FileWriter("C:\\doc" + j + ".txt");
   BufferedWriter writer = new BufferedWriter(outFile);     

    //Read one line at a time from the input file
   if ((strLine = reader.readLine()) !=null) { break; } // exit loop
   //process a string which is not empty

   if (strLine.length() > 0) {

   System.out.println("This is strLine: " + strLine);
   writer.write (strLine);

   i=i+1;
   j=j+1;
   if (j >= 12) {j=0};
   System.out.println("This is i: " + i);

   } //end of if


   singleFile.close();
   writer.close();

   } }}

它適用於以下代碼。 由於我知道文檔中只有12行-想知道如何在輸入文件中找出總行號。

   import java.util.*;
   import java.io.*;



  public class MyFunction {
 public static void main(String args[])
 throws IOException, ClassNotFoundException
 {


 //variable initialization

String strLine;

 //Read in a file and process one line at a time

   FileReader singleFile = new FileReader("C:\\data\\data.txt");  
   BufferedReader reader = new BufferedReader(singleFile);

    for (int i=0; i<12; i++) {
    FileWriter outFile = new FileWriter("C:\\sample\\doc" + i + ".txt");
    BufferedWriter writer = new BufferedWriter(outFile);     

    //Read one line at a time from the input file
    if ((strLine = reader.readLine()) !=null) 
    //process a string which is not empty

    if (strLine.length() > 0) {

    System.out.println("This is strLine: " + strLine);
    writer.write (strLine);

    System.out.println("This is i: " + i);

    } //end of if


  singleFile.close();
  writer.close();

    } }}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM