11

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

  • 参数是否应该是类型String

    void normalizeData(String inFile)
    
  • 或者我应该将参数显式声明为File.

    void normalizeData(File inFile)
    

就我个人而言,我觉得File更直观,但想知道这些事情的最佳实践是什么。

4

5 回答 5

22

我会通过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()));
于 2013-06-17T07:38:19.537 回答
4

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

还要考虑传递一个InputStream,因为 API 的用户可能希望使用任何内存中的数据表示。

于 2013-06-17T07:38:40.450 回答
1

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

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

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

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

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

于 2013-06-17T07:45:50.063 回答
0

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

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

于 2013-06-17T07:37:21.223 回答
0

如果您传递字符串,则您可以控制文件打开方式和文件句柄管理的方法。您正在集中该代码。如果您传递File对象,那么您将在任何地方复制文件处理代码。所以我对前者有强烈的偏好。

于 2013-06-17T07:36:25.937 回答