从Path开头用//读取文本文件并包含冒号

时间:2016-10-03 10:17:55

标签: java tomcat path

正如标题中所述,我试图从位于Tomcat-Context文件中的String的路径中读取文件。

路径以" /// C:"开头。在Unix系统上,它将以" / C:"开头。 截至目前,我正在努力做到如下:

MyPath = Paths.get("///C:" + filename);
byte[] encoded = Files.readAllBytes(MyPath);
String JsonString = new String(encoded);

这会导致此错误:"索引4:/// C:/file.json"

中路径中的非法字符[:]

我知道Windows并不喜欢Colons的路径,但是当我切断领先的Substirng" ///"从路径,Windows可以处理它。 (但这并不能帮助我,因为这很脆弱,而且编码方式很糟糕。而且它不能在一半的服务器上工作)

我很害羞这只是我不理解路径命名约定。 那么这种路径应以何种方式处理?

问候: 荣格

2 个答案:

答案 0 :(得分:1)

我的错误是,我没有将我收到的网址视为网址。 以下代码片段起到了作用:

MyPath = Paths.get( new URL("///C:" + filename).toURI() );

它适用于两个系统。我认为Paths.get()理解" ///"仅限于网址。

答案 1 :(得分:0)

我的建议是先检查你最初使用System.getProperty()的操作系统(作为常量会更高效的IMO,但取决于你的程序):

private static final boolean Windows = System.getProperty( "os.name" ).contains( "indow" );

如果你在Windows上并且对另一个(Linux / OS X)

是假的,那将是真的

然后,您必须在传递文件路径时检查您是否在Windows上。如果它是真的,则需要子串()例如:传递" C:"而不是" /// C:") ,否则就像其他操作系统一样:

MyPath = Paths.get((Window ? drive.substring(3) : drive) + filename);