Linux上的Java File.toURI()问题

时间:2014-04-16 12:48:53

标签: java linux

我正在尝试将文件的URI放入HTML文档中,然后处理该文档以从该HTML读取图像位置(在系统临时目录中)并对图像进行一些处理

它在Windows上工作正常,但在Linux上我遇到了无法找到HTML中的图像位置以供后续处理的问题。我认为问题如下......

在Windows上,返回File.toURI()。toString()命令(对于C:\ temp \ image.jpeg):

文件:/ C:/temp/image.jpeg

在Linux上,因此可能会返回(对于/tmp/image.jpeg):

文件://tmp/image.jpeg

HTML解析器将其解释为tmp / image.jpeg(即相对路径),因此无法找到。

是否有一个简单的解决方法,或者我是否需要手动强制URI正确(我猜文件:///tmp/image.jpeg和file:// C:/temp/image.jpeg) ?

3 个答案:

答案 0 :(得分:1)

您可以尝试执行以下操作:

String imageUri = File.toUri().toString().replaceFirst("^file:/", "");

正则表达式应该可以帮助您在Windows和Linux上获取文件资源

答案 1 :(得分:1)

正如我在对您的问题的评论中提到的:不要将file: URI发布到HTML文档。

使用相对于网站根目录的相对URI或绝对URI

谷歌在发布网站以获取详细信息时,相对URI和绝对URI的区别。

现在,如果你如此倾向于使用file:URIs ,那么你可能想尝试获取规范路径。地狱,规范路径是人们想要用来发布文件位置的首选路径类型(除非我之前提到过在网上发布):

// java-like pseudocode:

String myFile = ... // some path, relative or absolute, to a file in an accessible file system

URI = (new File(myFile)).getCanonicalFile().toURI();

检查File和getCanonicalFile / getCanonicalPath上的Oracle / Sun javadoc信息以获取详细信息。

这可能仍然无法解决问题,因为您提到 HTML解析器处理文件:URI是相对的(但您没有提到您正在使用的 HTML解析器。 )

在一天结束时,您可以更好地发布相对于文档根目录的URL,而不是使用file: URI。这些URI从未打算像那样使用。

答案 2 :(得分:0)

您提供绝对路径,您需要将图像导入项目,然后在代码中为项目提供相对路径。