gpt4 book ai didi

Java:寻找 hack 来处理 Linux 中的 Windows 文件路径

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:14 26 4
gpt4 key购买 nike

假设您在 Windows 应用程序之上的 Java 之上有一个大型遗留 ColdFusion。文件访问是通过 java.io.File 和 CFFILE(反过来也使用 java.io.File)完成的,但没有以任何方式集中到单个文件访问库中。此外,假设您在代码中和数据库中都有硬编码的文件路径。

换句话说,假设文件路径本身不能改变。它们可以是本地或远程 Windows 文件路径:

  • c:\temp\file.txt
  • \\server\share\file.txt

有没有一种方法可以在 Linux 上以最少的代码更改运行此应用程序?我正在寻找不涉及遗留代码的创造性解决方案。

一些想法:

  • 在 WINE 上运行它。这实际上有效,因为 WINE 将转换本地路径,并为远程路径提供一个 samba 客户端。
  • 有没有办法覆盖 java.io.File 以使用自定义代码执行文件路径转换?在这种情况下,我会将远程路径转换为挂载点。

最佳答案

Is there a way to override java.io.File to perform the file path translation with custom code? In this case, I would translate the remote paths to a mount point

是的,您可以执行您自己的 java.io.File 实现并将它放在一个单独的 jar 中,然后加载它而不是真正的 java.io.File.

要加载 JVM,您可以使用 java.endorsed.dirs 属性或 java 启动器 (java) 中的 java -Xbootclasspath/p:path 选项

但是!!!

创建您自己的 java.io.File 类版本不像修改遗留源代码那么容易。

如果您害怕破坏某些东西,您可以先提取所有硬编码路径以使用资源包:

所以:

 File file = new File("C:\\Users\\oreyes\\etc.txt");

会是:

File file = new File( Paths.get( "user.dir.etc" ));

Paths 内部会有一个资源包

class Paths {
private static ResourceBundle rs = ResourceBundle.getBundle("file.paths");
public static String get( String key ) {
rs.getString( key );
}
}

您可以使用 IDE(通常是国际化插件)提取所有这些硬编码路径

为 Linux 提供不同的资源包并完成。测试再测试再测试

因此,仅将提供您自己的 java.io.File 作为最后的资源。

关于Java:寻找 hack 来处理 Linux 中的 Windows 文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2479721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com