打开和关闭文件 - 单独的方法

时间:2010-11-28 18:40:06

标签: java file methods

我正在学习从文本文件中读取的基础知识。如果一切都在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

5 个答案:

答案 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)

要让openFilecloseFile分享一些数据,您需要将该数据作为字段添加到类中。

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方法中不可见。要使用openclose方法,您的FileReader必须是成员变量。

答案 4 :(得分:0)

我只想在这里添加一些内容。它不是一个答案,而是一个有用的信息。您不需要关闭BuffuredReader和FileReader。关闭BufferedReader中的任何一个就足够了。之前的问题已经回答here