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

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

  • 该参数应该是String类型

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

     void normalizeData(File inFile) 

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

我会传递一个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())); 

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

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

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

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

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

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

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

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

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

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