我正在学习从文本文件中读取的基础知识。如果一切都在main方法中,我的代码可以正常工作。但是,对于本练习,我被要求将开放和关闭方法放入单独的方法中。 open方法接受一个参数(文件名),而close方法不接受任何参数。
open方法运行正常。关闭方法是我的问题。
import java.io.*;
class EmpInFile
{
public static void main(String[] args) throws IOException {
EmpInFile myFile = new EmpInFile() ;
myFile.openFile("payslip.txt") ;
myFile.closeFile() ;
} // end main
public void openFile(String filename) throws IOException {
String line ;
int numLines ;
// open input file
FileReader reader = new FileReader(filename) ;
BufferedReader in = new BufferedReader(reader) ;
numLines = 0 ;
// read each line from the file
line = in.readLine() ; // read first
while (line != null)
{
numLines++ ;
System.out.println(line) ; // print current
line = in.readLine() ; // read next line
}
System.out.println(numLines + "lines read from file") ;
} // end openFile
public void closeFile() throws IOException {
in.close() ;
System.out.println("file closed") ;
} // end closeFile
} // end class
答案 0 :(得分:4)
我认为这是糟糕的设计。你的openFile()方法做的远远不止于此 - 它正在读取完整的内容并将它们回显到控制台(没用,但这就是你正在做的事情)。
我没看到你的close()方法提供了什么值。你最好传入一个文件来关闭。简单地从java.io.File包装方法时你做了什么?至少处理异常,以便用户不必这样做。
我不建议使用类变量。您可以编写三个静态的方法,这些方法将更有用:
package utils;
public class FileUtils
{
public static Reader openFile(String fileName) throws IOException
{
return new FileReader(new File(fileName));
}
public static List<String> readFile(String fileName) throws IOException
{
List<String> contents = new ArrayList<String>();
BufferedReader br = null;
try
{
br = new BufferedReader(openFile(fileName));
while ((String line = br.readLine()) != null)
{
contents.add(line);
}
}
finally
{
close(br);
}
return contents;
}
public static void close(Reader r)
{
try
{
if (r != null)
{
r.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
答案 1 :(得分:2)
要让openFile
和closeFile
分享一些数据,您需要将该数据作为字段添加到类中。
import java.io.*;
class EmpInFile
{
// shared data here.
BufferedReader in;
public void openFile() {
... set something in "in"
}
public void closeFile() {
... close "in"
}
答案 2 :(得分:1)
您需要将in
设为班级字段。
答案 3 :(得分:0)
您的文件指针在close
方法中不可见。要使用open
和close
方法,您的FileReader
必须是成员变量。
答案 4 :(得分:0)
我只想在这里添加一些内容。它不是一个答案,而是一个有用的信息。您不需要关闭BuffuredReader和FileReader。关闭BufferedReader中的任何一个就足够了。之前的问题已经回答here