我正在尝试从文件中读取整数,对它们应用一些操作并将生成的整数写入另一个文件。
// 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方式。我想坚持一种方法,所以超越最佳方法?
答案 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
撰写字符数据时,您真的不需要PrintWriter
,printwriter
有一个构造函数,filewriter
为argument
。并且不需要scanner
中的read
到file
,您可以使用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)));