我有几种方法将文件名作为参数。我怀疑的是,什么是更好的方式来声明这些方法的参数。
参数是否应为String
void normalizeData(String inFile)
或者我应该将参数明确声明为File
。
void normalizeData(File inFile)
我个人认为File
更直观,但想知道这些事情的最佳做法是什么。
答案 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方法需要处理文件对象,那么只需将文件名传递给它。
取决于您的需求以及您希望如何处理文件。