我在不同的平台上工作(Solaris / Windows)。我需要创建一个包含多个路径元素的文件对象。问题是:最好是“一步一步”或在一次调用中创建最终的File对象。后者假设Java在不同平台上进行正确的路径映射。由于文件分隔符不同,它是否总是进行正确的映射?
File parent = // some directory;
// Use several file objects...
File myFile1 = new File(new File(new File(parent, "part1"), "part2"), "myfile");
// .. or use just on (on all platforms!)?
File myFile2 = new File(parent, "part1/part2/myfile");
第一种解决方案可能(a)较慢且(b)可读性较差......
答案 0 :(得分:2)
我认为解决方案(1)没有任何优势。两者都将创建一个有效的File
对象,当然,第二个解决方案更容易理解,因为它清楚地表明,您有一个相对于某个父文件夹的路径。
答案 1 :(得分:1)
使用第二个,而不是对正斜杠进行硬编码,请使用File.separatorChar
/ File.separator
:
系统相关的默认名称分隔符。此字段初始化为包含系统属性file.separator的值的第一个字符。在UNIX系统上,该字段的值为“/”;在Microsoft Windows系统上它是'\'。
请注意,您不需要使用Sun的JVM执行此操作 - Win32FileSystem
类会转换为反斜杠 - 如果您查看其代码,则它具有slash
和altSlash
,如果遇到altSlash
(/
),该类会规范化路径
但是,正如评论中所指出的,为了保证您的代码可以移植,请使用File.separator
答案 2 :(得分:0)
除非您想对父文件对象执行某些操作(例如,如果目录存在)或重用多个文件的父文件对象,否则第一个解决方案没有任何优势。如果您只为一个文件创建File对象,请使用秒。这不那么冗长。