如果我尝试在Linux中使用包含空格的路径,显然会得到FileNotFoundException。但是,如果我尝试在路径中添加双/单引号作为解决方法,我会得到相同的异常。
我试图检查原因,发现使用引号时生成的绝对路径变为: user.home 系统属性+指定路径。
例如:
如果我使用此路径:
/home/db2inst1/Desktop/testing - Development Environmet/64_dev/testing/logs
这是我尝试使用引号时获得的绝对路径:
/home/db2inst1/"/home/db2inst1/Desktop/testing - Development Environmet/64_dev/testing/logs"
我还尝试用“\”替换空格而不是添加引号,但它不起作用。
我尝试了很多API,并且每次都会发生这种情况,并将此代码仅用于测试:
System.out.println("- regular path: ");
System.out.println(new File(path).getPath());
System.out.println(new File(path).getAbsolutePath());
System.out.println("- quoted path: ");
System.out.println(new File(quotedPath).getPath());
System.out.println(new File(quotedPath).getAbsolutePath());
这是输出:
- regular path:
/home/db2inst1/Desktop/testing - Development Environmet/64_dev/testing/logs/testing.log
/home/db2inst1/Desktop/testing - Development Environmet/64_dev/testing/logs/testing.log
- absolute path:
"/home/db2inst1/Desktop/testing - Development Environmet/64_dev/testing/logs/testing.log"
/home/db2inst1/"/home/db2inst1/Desktop/testing - Development Environmet/64_dev/testing/logs/testing.log"
有谁知道为什么会这样,以及如何让它发挥作用?
答案 0 :(得分:0)
根据您的描述,您似乎在调用File(java.lang.String pathname)
构造函数。
如果是这样,用于表示路径的String
不应使用引号。
抽象路径名定义中的引号不被视为特殊字符,如java.io.File
文档中所述。
抽象路径名有两个组成部分:
- 可选的系统相关前缀字符串,例如磁盘驱动器说明符,“/”表示UNIX>根目录,或“\\”表示Microsoft Windows UNC路径名,
- 一个零个或多个字符串名称的序列。
醇>
由于引号不是特殊字符,因此它们被视为名称的一部分。
示例:
public static void main(String[] args) {
File quotes = new File("\"C:\\myFolder\"");
File noQuotes = new File("C:\\myFolder");
System.out.println("Absolute path with quotes:" + quotes.getAbsolutePath());
System.out.println("Absolute path without quotes:" + noQuotes.getAbsolutePath());
System.out.println("Equal: " + quotes.equals(noQuotes));
File empty = new File("");
File emptyQuotes = new File("\"\"");
System.out.println("Empty path with quotes:" + empty.getAbsolutePath());
System.out.println("Empty path without quotes:"
+ emptyQuotes.getAbsolutePath());
System.out.println("Equal: " + empty.equals(emptyQuotes));
}
在Windows上的C:\temp
中运行时,将生成以下输出:
Absolute path with quotes:C:\temp\"C:\myFolder"
Absolute path without quotes:C:\myFolder
Equal: false
Empty path with quotes:C:\temp
Empty path without quotes:C:\temp\""
Equal: false
答案 1 :(得分:0)
在Windows中,不带空格的文件名应使用相同的引号引用相同的文件(或文件夹)。例如,如果我们在两个命令行中都有一个名为c:\ uni2的文件夹
dir c:\uni2
dir "c:\uni2"
应该给出相同的结果。但是在Java中
String rename;
boolean ya;
File f1 = new File ("C:/UNI2"); // given that exists and it is a directory
ya = f1.exists(); // true
ya = f1.isFile(); // false
ya = f1.isDirectory(); // true
rename = f1.getAbsolutePath(); // "C:\\UNI2"
f1 = new File ("\"C:/UNI2\""); // in windows this should be the same directory!!
ya = f1.exists(); // false
ya = f1.isFile(); // false
ya = f1.isDirectory(); // false
rename = f1.getAbsolutePath(); // "C:\tmp\"C:\UNI2""
这不是预期的行为(即使已记录)。