Java File I / O中的良好实践

时间:2012-11-01 08:23:15

标签: java file-io filewriter printwriter bufferedwriter

我正在尝试从文件中读取整数,对它们应用一些操作并将生成的整数写入另一个文件。

// Input
FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
Scanner s = new Scanner(br);

// Output
FileWriter fw = new FileWriter("out.txt");
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);

int i;

while(s.hasNextInt())
{
    i = s.nextInt();
    pw.println(i+5);
}

我想问一下这样包装这些输入和输出流是一个好习惯吗? 我是java和互联网的新手,我在文件中看到了许多其他的I / O方式。我想坚持一种方法,所以超越最佳方法?

5 个答案:

答案 0 :(得分:3)

请记住,这些类的设计基于Decorator design pattern。一个好的做法是关闭java.io.Closeable块中finally的所有实例。例如:

    Reader r = null;
    Scanner s = null;
    try {
        r = new FileReader("test.txt");
        s = new Scanner(r);
        // Do your stuff here.
    } finally {
        if (r != null)
            r.close();
        if (s != null)
            s.close();
    }

或者,如果您使用的是Java 7或更高版本:

    try (
            Reader r = new FileReader("test.txt");
            Scanner s = new Scanner(r)
            ) {
        // Do your stuff here.
    }

答案 1 :(得分:2)

- 考虑一下你去购物中心购物,现在你经常做什么,从自己拿起每件物品,然后去计费柜台,然后再去自己和回到计费柜台.... ??或者将所有物品存放到购物车中,然后转到结算柜台。

- 它在Java中类似,Files处理字节,Buffer处理字符,因此字节转换为字符并相信我的工作原理好吧,不会有任何明显的开销。

所以阅读文件:

File f = new File("Path");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);

所以写文件:

File f = new File("Path");
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);

当您使用Scanner时,无需使用BufferedReader

答案 2 :(得分:1)

当您使用BuffredWriter撰写字符数据时,您真的不需要PrintWriterprintwriter有一个构造函数,filewriterargument。并且不需要scanner中的readfile,您可以使用bufferedreader本身来实现它。

FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
while((line=br.readLine())!=null){
//do read operations here
}

FileWriter fw = new FileWriter("out.txt");
PrintWriter pw = new PrintWriter(fw);
 pw.println("write some data to the file")

答案 3 :(得分:1)

扫描仪不需要BufferedReader。您可以将其包装在FileReader上。

Scanner s = new Scanner(new FileReader("test.txt"));

使用扫描仪时,最好假设源包含各种内容。使用后关闭扫描仪是很好的。

   while(s.hasNext()){

    if(s.hasNextInt())
      int i = s.nextInt();

    s.next();
    }
     s.close();

答案 4 :(得分:0)

我通常这样做:

String inputFileLocation = "Write it here";

BufferedReader br = new BufferedReader(new FileReader(new File(fileLocation)));

while((line=br.readLine())!=null){
//Scanner operations here
}

String outputFileLocation = "Here";
PrintWriter pr = new PrintWriter(new FileWriter(new File(outputFileLocation)));