哪个更好 - 使用String或File作为获取文件名的方法的参数类型

时间:2013-06-17 07:34:39

标签: java file-io

我有几种方法将文件名作为参数。我怀疑的是,什么是更好的方式来声明这些方法的参数。

  • 参数是否应为String

    类型
    void normalizeData(String inFile)
    
  • 或者我应该将参数明确声明为File

    void normalizeData(File inFile)
    

我个人认为File更直观,但想知道这些事情的最佳做法是什么。

5 个答案:

答案 0 :(得分:20)

我会传递java.io.InputStream - 这使代码更容易测试,并且不会将其绑定到文件系统。

这样你的代码最终会像:

public void normalizeData(InputStream in)
{
  ...
}

并称之为:

myObject.normalizeData(new FileInputStream(myFile));

或者

myObject.normalizeData(new FileInputStream("c:/myfile.txt"));

或者在测试中

myObject.normalizeData(new ByteArrayInputStream("some test data".getBytes()));

答案 1 :(得分:4)

考虑使用多个重载方法来选择API的用户。

另外考虑传递InputStream,因为API的用户可能想要使用数据的内存表示。

答案 2 :(得分:1)

设计取决于许多参数,例如,谁将使用此方法。是否会重载,是内部,包级别还是公共API。我倾向于一般并提供两种重载方法:

  • 传递Path的一个,这是指定文件路径的常用方法
  • 和传递InputStream的那个,即输入字节流的一般表示

    public void normalizeData(Path filePath)// Path是指定文件路径的常用方法

    public void normalizeData(InputStream)//输入字节流的一般表示

但正如我所说,这取决于你的项目规范。

答案 3 :(得分:0)

如果传递字符串,则可以在方法中控制文件的打开方式,并管理文件句柄。您正在集中该代码。如果您传递File对象,那么您将在调用此处的任何位置复制文件处理代码。所以我对前者非常偏爱。

答案 4 :(得分:0)

这取决于您是希望文件hanlde在normalizeData方法之外还是仅在其内部。如果要在调用normalizeData方法之前或之后对文件执行某些操作,请在normalizeData方法之外创建一个文件对象,并将该引用传递给该方法。如果只有你的normalizeData方法需要处理文件对象,那么只需将文件名传递给它。

取决于您的需求以及您希望如何处理文件。