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 回答