2012-11-01 21 views
2

我想从文件中读取整数,在它们上应用一些操作并将这些整数写入另一个文件。在Java文件I/O中的好习惯

// 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的其他方式。我想坚持一种方法,所以超出最佳方法?你不

+1

多大的文件? –

回答

1

当您使用PrintWriter写入字符数据,printwriter有一个构造函数这需要filewriterargument真的需要BuffredWriter。并且不需要scannerreadfile您可以使用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") 
+0

我采取了BufferedWriter来提高效率。我包括扫描仪,所以我可以读取整数。我不确定如何在没有Scanner的情况下执行此操作,因为BufferedReader只有read()或readLine()方法。 –

+0

确实,扫描仪不必简单地读取文件。但是,扫描器允许您至少解析令牌,并且这对于大多数应用程序是必需的 – smaccoun

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(); 
+0

但是我在某处阅读我们应该使用BufferedReader来提高效率。不是吗? –

+0

它们有不同的功能。扫描仪可用于基于原始值或分隔符字符串标记输入。 BufferedReader比FileReader有一个优点,它可以一次读取文本行。 – clinton

1

-嗯认为你一起逛街,到食品商场,现在你平时做什么,从自我回升每个项目,然后转到帐单计算器然后再次去到自我和背部到计费柜台.... ??或将所有物品存入购物车,然后转到结算柜台。

-它类似于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

3

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

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. 
    } 
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)));