【问题标题】:Can I write FileWriter and bufferedwriter in a same class in Java?我可以在 Java 的同一个类中编写 FileWriter 和 bufferedwriter 吗?
【发布时间】:2018-11-09 04:33:32
【问题描述】:

这是我尝试使用 Filewriter 编写的代码。这工作正常。

File f2 = new File("Path");
f2.createNewFile();
FileWriter writing = new FileWriter(f2);    
writing.write("i'm into you , i'm into you");   
writing.flush(); 

在下面的代码中,我尝试使用 bufferedwriter 进行编写。这不是将任何文本添加到同一个文件中。对于不同的文件,它正在工作。

BufferedWriter buffwrite = new BufferedWriter(writing);     buffwrite.write("java");    
writing.flush(); 

【问题讨论】:

  • try buffwrite.flush() 你正在刷新 FileWriter。

标签: java filewriter bufferedwriter


【解决方案1】:

是的,你当然可以在同一个班级写这两个。 您的代码没有将任何文本添加到同一个文件中,因为您在 BufferedWriter 之前刷新了 FileWriter。我刚刚编辑了您的代码,如下所示,效果很好。

File f2 = new File("Path");
f2.createNewFile();
FileWriter writing = new FileWriter(f2);  
writing.write("i'm into you , i'm into you");

BufferedWriter buffwrite = new BufferedWriter(writing); 
buffwrite.write("java"); 

buffwrite.flush();//flush BufferedWriter first followed by FileWriter
writing.flush(); 

【讨论】:

    【解决方案2】:

    你应该close你打开的资源:@​​987654324@和BufferedWriter buffwrite。这个(JavaDoc)

    刷新流。如果流已从 缓冲区中的各种 write() 方法,立即将它们写入它们的 预定目的地。然后,如果该目的地是另一个角色 或字节流,刷新它。因此,一次 flush() 调用将刷新所有 Writers 和 OutputStreams 链中的缓冲区。

    正确的方法是使用try-resource 语句。这将关闭打开的资源。

    或者使用java.nio.file.Files.write 方法来处理资源。

    【讨论】:

      【解决方案3】:

      这些IO相关的类是基于装饰器模式设计的。

      如果您参考BufferedWriter 类javadoc,您会发现一个采用Writer 类型对象的构造函数。 Writer 是一个抽象类,由FileWriter 在其他类中扩展。在构造函数中传递你的FileWriter 对象,然后调用BufferedWriterwrite (...)flush 方法。

      所有 IO 类都以这种模式工作。

      【讨论】:

        【解决方案4】:

        是的你可以写。请查看以下用例,以使用 Java 中的 FileWriter、BufferedWriter、FileOutputStream 和 Files 在 Java 中写入文件。

        package com.journaldev.files;
        
        import java.io.BufferedWriter;
        import java.io.File;
        import java.io.FileOutputStream;
        import java.io.FileWriter;
        import java.io.IOException;
        import java.io.OutputStream;
        import java.nio.file.Files;
        import java.nio.file.Paths;
        
        public class WriteFile {
        
            /**
             * This class shows how to write file in java
             * @param args
             * @throws IOException 
             */
            public static void main(String[] args) {
                String data = "I will write this String to File in Java";
                int noOfLines = 10000;
                writeUsingFileWriter(data);
        
                writeUsingBufferedWriter(data, noOfLines);
        
                writeUsingFiles(data);
        
                writeUsingOutputStream(data);
                System.out.println("DONE");
            }
        
            /**
             * Use Streams when you are dealing with raw data
             * @param data
             */
            private static void writeUsingOutputStream(String data) {
                OutputStream os = null;
                try {
                    os = new FileOutputStream(new File("/Users/pankaj/os.txt"));
                    os.write(data.getBytes(), 0, data.length());
                } catch (IOException e) {
                    e.printStackTrace();
                }finally{
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        
            /**
             * Use Files class from Java 1.7 to write files, internally uses OutputStream
             * @param data
             */
            private static void writeUsingFiles(String data) {
                try {
                    Files.write(Paths.get("/Users/pankaj/files.txt"), data.getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        
            /**
             * Use BufferedWriter when number of write operations are more
             * It uses internal buffer to reduce real IO operations and saves time
             * @param data
             * @param noOfLines
             */
            private static void writeUsingBufferedWriter(String data, int noOfLines) {
                File file = new File("/Users/pankaj/BufferedWriter.txt");
                FileWriter fr = null;
                BufferedWriter br = null;
                String dataWithNewLine=data+System.getProperty("line.separator");
                try{
                    fr = new FileWriter(file);
                    br = new BufferedWriter(fr);
                    for(int i = noOfLines; i>0; i--){
                        br.write(dataWithNewLine);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }finally{
                    try {
                        br.close();
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        
            /**
             * Use FileWriter when number of write operations are less
             * @param data
             */
            private static void writeUsingFileWriter(String data) {
                File file = new File("/Users/pankaj/FileWriter.txt");
                FileWriter fr = null;
                try {
                    fr = new FileWriter(file);
                    fr.write(data);
                } catch (IOException e) {
                    e.printStackTrace();
                }finally{
                    //close resources
                    try {
                        fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-03
          • 2020-05-25
          • 2018-04-16
          • 1970-01-01
          • 2016-07-29
          • 2013-07-27
          • 2019-06-08
          • 1970-01-01
          相关资源
          最近更新 更多