【问题标题】:writing to text file using BufferedReader使用 BufferedReader 写入文本文件
【发布时间】:2013-09-04 18:40:12
【问题描述】:

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

【问题讨论】:

    标签: java file bufferedreader binaryfiles


    【解决方案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();
    }
    

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

    【讨论】:

    • 我在main方法中声明了异常,因为这是解释,不是实际的生活情况,当您尝试使用此类代码时需要处理异常
    【解决方案2】:

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

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

    • 当您的文件处于打开状态以供阅读时,修改同一个文件并不是一个好主意。您可以使用以下方法:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-11
      • 2013-04-12
      • 2011-12-11
      • 1970-01-01
      • 2012-05-27
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多