我有一个用java编写的应用程序,用斜杠来指定文件和目录path。 当应用程序在Linux上运行时,文件和目录可以访问。 但是当它在Windows上运行时,它说错误,指定的path是不正确的。如何唯一指定文件的path。
在java iam中使用这个命令:
public static final String WD ="/qark-master/qark/qarkMain.py"; public static final String MANIFESTPATH="/apktool/AndroidManifest.xml";
请帮我在这里!
正如吉姆·加里森(Jim Garrison)所提到的,在Windows和Unix中的正斜杠工作。 问题是驱动器号或根目录。 在根目录/qark-master
定义的Windows路径中时,它是当前驱动器的根目录。 但是…在Windows中使用驱动器号或Linux中的根在代码中使用绝对路径不是一个好主意。 更好的方法是使用当前运行目录或特殊环境变量的相对路径。 那么你可以使用正斜杠而不关心路径分隔符。
另一方面,JVM中有一个名为“file.separator”的System属性,可以根据OS构建一个路径。 当然,Windows驱动器盘符的绝对路径的问题是无论如何。
虽然Java会在Windows和Linux中愉快地使用正斜杠,但在Windows中对驱动器号前缀的要求使得在两个系统中不可能使用相同的绝对路径。
您需要做的是使用属性文件来配置操作系统相关的参数(如文件位置),并在每个系统上具有不同版本的属性文件。
请注意,在Java代码中硬编码外部资源引用(即文件路径)是非常糟糕的做法。 相对引用是可以的,但它们必须相对于运行时提供的一些基本位置,而不是编译到可执行文件中。
您需要转义字符的转义序列。 更多细节在这里 – 转义字符
在Windows中,您需要使用反斜线定义文件分隔符的转义字符 – 如下所示。
String filePath = "C:\\Users\\b21677\\DFS.docx";
在Linux中,您应该按原样定义
public static final String WD ="/qark-master/qark/qarkMain.py";
这工作正常,当我使用file.separator。
public static final String QWD = File.separator +"qark-master" + File.separator +"qark" + File.separator +"qarkMain.py"; public static final String MANIFESTPATH=File.separator +"apktool"+ File.separator +"AndroidManifest.xml";