假设您在Windows应用程序之上拥有基于Java的大型遗留ColdFusion.文件访问是通过java.io.File和CFFILE(后者也使用java.io.File)完成的,但不以任何方式集中到单个文件访问库中.此外,假设您在代码中以及数据库中都有硬编码的文件路径.
换句话说,假设文件路径本身不能改变.它们可以是本地或远程Windows文件路径:
有没有办法在Linux上以最少的代码更改运行此应用程序?我正在寻找不涉及遗留代码的创造性解决方案.
一些想法:
有没有办法覆盖java.io.File以使用自定义代码执行文件路径转换?在这种情况下,我会将远程路径转换为挂载点
是的,您可以执行自己的实现java.io.File并将其放在一个单独的jar中,然后加载它而不是真实的java.io.File.
要让JVM加载它,您可以使用java启动器中的 java.endorsed.dirs属性或 java -Xbootclasspath/p:path选项(java)
但!!!
创建自己的java.io.File类版本并不像修改遗留源代码那么容易.
如果您害怕破坏某些东西,可以先提取所有硬编码路径以使用资源包:
所以:
File file = new File("C:\\Users\\oreyes\\etc.txt");
Run Code Online (Sandbox Code Playgroud)
将会:
File file = new File( Paths.get( "user.dir.etc" ));
Run Code Online (Sandbox Code Playgroud)
并且Paths内部会有一个资源包
class Paths {
private static ResourceBundle rs = ResourceBundle.getBundle("file.paths");
public static String get( String key ) {
rs.getString( key );
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用IDE(通常是国际化插件)提取所有这些硬编码路径
为Linux和您完成提供不同的资源包.测试并重新测试并重新测试
因此,使用java.io.File仅提供您自己的资源作为最后资源.