1

database.txt から行を読み取り、奇数/偶数行をファイル 1.txt および 2.txt に書き込むプログラムを作成しようとしています。Fe database.txt の 1 番目 (奇数) 行は 1.txt になり、database.txt の 2 番目 (偶数) 行は 2.txt になります。

これまでに得たコードは次のとおりです。

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

public class Main {

    public Main(){
        op(null);
    }

    public void op(String args[]){
        try{
            FileReader fr = new FileReader("database.txt");
            BufferedReader reader = new BufferedReader(fr);
            String line = reader.readLine();
            Scanner scan = null;
            int ln = 1;
            String even = "2txt";
            String odd = "1.txt";
            while ((line=reader.readLine())!=null){
                scan = new Scanner(line);
                if(ln%2==0){
                    wtf(even, line);
                }else{
                    wtf(odd, line);
                }
                ln++;
                line=reader.readLine();
            }
            reader.close();
        }
        catch (FileNotFoundException e){
            System.out.println("File not found");
        } 
        catch (IOException e) {
        System.out.println("Impossibru to read");
        }
    }

    public void wtf(String filename, String ltw){
        try
        {
            FileReader fr = new FileReader(filename);
            BufferedReader reader = new BufferedReader(fr);
            String line = reader.readLine();

            FileWriter writer = new FileWriter(filename);
            BufferedWriter bw = new BufferedWriter(writer);
            while(line==null){
                bw.write(ltw);
                bw.newLine();
            }
            bw.close();
        }
        catch ( IOException e)
        {
        }
    }
    }

現時点では、無限ループで2行目のみを読み取り、1.txtにスパムします

4

5 に答える 5

2
      if(ln%2==0){
            wtf(even, line);
        }else{
            wtf(odd, line);
             } //<------------here ?
            ln++;
            line=reader.readLine();
    // }
    }
    reader.close();

アップデート:

   while((line=reader.readLine())!=null){
               *
               *
               *
            line=reader.readLine() ; //is this line  required ?

アップデート:

これも wtf() で確認してください

 while(line==null){
                bw.write(ltw);
                bw.newLine();
        }
于 2013-07-22T13:01:35.077 に答える
1

問題はwtfメソッドにありました。あなたが書いたとき、あなたの無限ループはそこにありました:

while(line==null){
                bw.write(ltw);
                bw.newLine();
}

BufferedReader はreturns null if the end of the stream has been reached. 、ファイルが最初は空であるため (私は推測しています)、これは常に真であり、新しい行と文字列を書き続けます。

私はあなたのコードをいじっていて、このようなものに書き直しました。

import java.util.*;
import java.io.*;
public class fread {
  public static void main (String[] args) {
    Scanner scan = new Scanner(System.in);

    String even = "2.txt";
    String odd = "1.txt";
    String line = "";

    int lineNumber = 0;

    while (scan.hasNext() )
    {
      line = scan.nextLine();
      if (lineNumber++ % 2 == 1)
        writeText(even, line);
      else
        writeText(odd, line);
    }
  }
  static void writeText(String filename, String ltw)
  {
    try
    {
      BufferedWriter bw = new BufferedWriter(new FileWriter(filename, true));
      bw.write(ltw);
      bw.newLine();
      bw.close();
    }
    catch ( IOException e)
    {
      e.printStackTrace();
    }
  }
}

入力リダイレクトを使用するため、入力java fread < database.txtすると結果が得られますが、これはファイルに追加するだけです。ファイルが存在しない場合、または最初は空である場合、これは期待どおりに機能します。プログラムの必要に応じて、このコードを指定する必要があります。いずれにせよ、私の writeText メソッドをプログラムに組み込んで、自分のプログラムを機能させることができるはずです。

于 2013-07-22T13:52:18.380 に答える