哪个更好 – 使用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方法需要处理文件对象,那么只需将文件名传递给它。
取决于您的需求以及您希望如何处理文件。