使用Java读取路径中带有空格的文件
我试图打开文件名中有空格的FileInputStream 例如:使用Java读取路径中带有空格的文件,java,java-io,Java,Java Io,我试图打开文件名中有空格的FileInputStream 例如: String fileName = "This is my file.txt"; String path = "/home/myUsername/folder/"; String filePath = path + filename; f = new BufferedInputStream(new FileInputStream(filePath)); 结果是抛出FileNotFoundException。 我试图将文件路径硬
String fileName = "This is my file.txt";
String path = "/home/myUsername/folder/";
String filePath = path + filename;
f = new BufferedInputStream(new FileInputStream(filePath));
结果是抛出FileNotFoundException。
我试图将文件路径硬编码到“/home/myUserName/folder/This\\is\\my\\file.txt”
,只是想看看我是否应该转义空白字符,但它似乎不起作用。
对这件事有什么建议吗
编辑:只是为了与所有查看此问题的人在同一页面上…打开名称中没有空格的文件是有效的,但打开名称中有空格的文件失败。权限不是这里的问题,也不是文件夹分隔符。不,不需要转义空白 如果代码抛出
FileNotFoundException
,则该文件不存在(或者,您可能缺少访问该文件所需的权限)
如果权限正常,并且您认为该文件存在,请确保该文件的名称与您认为的名称相同。特别是,请确保文件名不包含任何不可打印的字符、无意中出现的前导或尾随空格等。为此,
ls-b
可能会有所帮助。看起来您遇到的问题是文件分隔符,而不是文件名中的空格。你试过使用吗
System.getProperty("file.separator")
而不是路径变量中的“/”?带有空格的文件名就可以了 这是我的密码
File f = new File("/Windows/F/Programming/Projects/NetBeans/TestApplications/database prop.properties");
System.out.println(f.exists());
try
{
FileInputStream stream = new FileInputStream(f);
}
catch (FileNotFoundException ex)
{
System.out.println(ex.getMessage());
}
f.exists()。只需确保在从外部源(如命令行)传递路径时,路径末尾不包含空格:
File file = new File(path.trim());
若您想要有一个不带空格的路径,您可以将其转换为URI,然后返回到path
try {
URI u = new URI(path.trim().replaceAll("\\u0020", "%20"));
File file = new File(u.getPath());
} catch (URISyntaxException ex) {
Exceptions.printStackTrace(ex);
}
如果路径中没有空格,则文件可能重复,我可以打开它们…因此权限似乎不是问题:(.@user253530:向我们展示列出问题文件的ls-l
输出。-rw-r--r--1 root root 101 2012-02-03 11:16 add.txt-rw-r--r--1 root 13969 2012-02-02 20:23 CASE 1A.txt每个人都有读取权限…这不是问题…我可以打开add.txt,但无法打开CASE 1A.txt…这是我确定的名称that@user253530:我确信嵌入的空格不是问题所在。请确保文件名不包含任何不可打印的字符、意外的前导或尾随空格等。ls-b
可能会有所帮助。感谢您向我展示我必须首先使用文件(路径)在将其发送到FileInputStream之前。@user253530:您是否暗示您的原始代码不起作用,并将filePath
包装到File()
中使其起作用?!是的……如果我使用FileInputStream(字符串filePath),它就不起作用了……但是如果我先使用File f=新文件(filePath),然后使用FileInputStream(f)不会抛出错误…非常奇怪..这没有意义-FileInputStream(字符串名称)的构造函数
只需创建一个文件
无论如何-代码是等效的。不要逃避空白,我相信你在unix/linux上就像env一样。如果它不起作用,你就是在做一些其他错误的事情,例如,错报文件名或smth其他