使用BufferedReader写入文本文件

时间:2013-09-04 18:40:13

标签: java file bufferedreader binaryfiles

我的问题是从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

2 个答案:

答案 0 :(得分:1)

根据您的问题陈述,您需要从文件中获取输入,进行一些处理并将处理后的数据写回同一文件中。为此,请注意以下几点:

  • 您不能在目录中创建具有相同名称的文件,因此您必须在其他位置创建新文件;或者将内容写入不同的文件,然后在删除原始文件后将其重命名。

  • 虽然您的文件已打开以供阅读,但修改同一文件并不是一个好主意。你可以使用以下方法:

  
      
  1. 读取文件的内容并存储在数据结构liek Arrays,ArrayList。
  2. 中   
  3. 关闭文件。
  4.   
  5. 处理存储在数据结构中的数据。
  6.   
  7. 以写入模式打开文件(覆盖模式而不是追加模式)
  8.   
  9. 将处理后的数据写回文件。
  10.   

答案 1 :(得分:1)

在java中读取和写入文件并不编辑该文件,但是清除旧文件并创建一个新文件,例如,您可以使用许多方法来获取数据,修改它,并将其保存在内存中。 StringBuilder或一个集合或者什么都重新编写它

我创建了包含以下数据的fileOne.txt:

1 2 3 4 五 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();
}

这种方法在处理海量数据时不是很好