2

私の問題は、txtファイルから非素数を読み取り、素因数を同じファイルに書き込むことです。私は実際に BufferedReader がどのように機能するかわかりません.私の理解から、ファイルデータをバッファ(8kb)に読み込んで素因数をファイルに書き込もうとしています.(新しいものを作成することによって)

    class  PS_Task2               
     {   
     public static void main(String[] args)     
      {     
     String line=null;  
      int x;        
      try              
       {

        FileReader file2 = new FileReader("nonprimes.txt");
        BufferedReader buff2=new BufferedReader(file2);

        File file1 = new File("nonprimes.txt"); 

        file1.createNewFile();      
        PrintWriter d=new PrintWriter(file1);
        while((line = buff2.readLine()) != null)    
        {
            x=Integer.parseInt(line);
            d.printf ("%d--> ", x);
            while(x%2==0)       
            {
                d.flush();
                d.print("2"+"*");
                x=x/2;
            }
            for (int i = 3; i <= Math.sqrt(x); i = i+2)
            {
                while (x%i == 0)
                {
                    d.flush();
                    d.printf("%d*", i);
                    x = x/i;
                }
            }
            if (x > 2)
            {
            d.flush();
            d.printf ("%d ", x);
            }
            d.flush();//FLUSING THE STREAM TO FILE
            d.println("\n");

        }
        d.close();  // CLOSING FILE

    }

詳細な説明をお気軽に。:D ありがとう ~anirudh

4

2 に答える 2

1

問題の説明に従って、ファイルから入力を取得し、何らかの処理を行い、処理されたデータを同じファイルに書き戻す必要があります。その際、以下の点にご注意ください。

  • ディレクトリに同じ名前のファイルを作成することはできないため、別の場所に新しいファイルを作成する必要があります。または、コンテンツを別のファイルに書き込み、後で元のファイルを削除した後に名前を変更します。

  • ファイルが読み取り用に開かれている間、同じファイルを変更することはお勧めできません。以下のアプローチを使用できます。

  1. ファイルの内容を読み取り、Arrays、ArrayList などのデータ構造に格納します。
  2. ファイルを閉じます。
  3. データ構造に格納されたデータを処理します。
  4. 書き込みモードでファイルを開きます (追加モードではなく上書きモード)。
  5. 処理されたデータをファイルに書き戻します。
于 2013-09-04T18:55:29.890 に答える
1

Java でのファイルの読み取りと書き込みはファイルを編集しませんが、古いファイルをクリアして新しいファイルを作成します。たとえば、データを取得して変更し、StringBuilder またはコレクションまたはこれまでに何かを書き直し、もう一度書き直します

さて、次のデータを含むfileOne.txtを作成しました:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

そして、これらすべての数値に10を掛けてから、もう一度書き直します。

public static void main(String [] args) throws Exception{    // just for the example

    // locate the file
    File fileOne = new File("fileOne.txt");
    FileReader inputStream = new FileReader(fileOne);
    BufferedReader reader = new BufferedReader(inputStream);


    // create a LinkedList to hold the data read
    List<Integer> numbers = new LinkedList<Integer>();

    // prepare variables to refer to the temporary objects
    String line = null;
    int number = 0;

    // start reading
    do{
        // read each line
        line = reader.readLine();

        // check if the read data is not null, so not to use null values
        if(line != null){
            number = Integer.parseInt(line);
            numbers.add(number*10);
        }

    }while(line != null);

    // free resources
    reader.close();

    // check the new numbers before writing to file
    System.out.println("NEW NUMBERS IN MEMORY : "+numbers);

    // assign a printer
    PrintWriter writer = new PrintWriter(fileOne);

    // write down data
    for(int newNumber : numbers){
        writer.println(newNumber);
    }

    // free resources
    writer.flush();
    writer.close();
}

このアプローチは、大量のデータを扱う場合にはあまり適していません

于 2013-09-04T19:25:27.513 に答える