2016-10-03 52 views
0

我,正如标题所说,试图读取给我一个字符串,位于Tomcat的上下文文件的路径的文件。阅读从路径的文本文件///开始,包含一个冒号

路径始于 “/// C:”。在Unix系统上,它将以“/ C:”开头。 截至目前,我尝试做如下:

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

这会导致这个错误:“非法字符[:]在指数4路:///C:/file.json”

我知道的Windows犯规就像它的路径冒号,但是当我剪了领先Substirng“///”从路径,窗户可以处理它。 (但是这并不能帮助我,因为这是脆弱的,而且是一种很糟糕的编码方式,并且它在一半的服务器上不起作用)

我很舒服这只是我不理解路径-naming-约定。 那么应该如何处理这种路径?

问候: 琼格

+0

你也应该记住,不是每个人都使用C:(有些人有像d :) –

+0

领先“/// C:/”是不是真的一个静态字符串。我只是用一个问题来替换它,所以它更易于阅读。 实际上,这将由服务器的上下文来设置。但是,谢谢你的帮助。 – Junge

回答

1

我的错误是,我没有把我收到的URL作为URL。 下面的代码片段的伎俩:

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

它适用于这两个系统。我认为Paths.get()只能在URL中理解“///”。

0

我的建议是检查你在第一与System.getProperty()的OS(为常数会更有效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); 
+0

嘿,谢谢。 也许这个作品,我最近发现,如果你得到一个网址,你应该把作为一个而不是一个简单的字符串。 下面的代码片段做了诀窍: 'MyPath = Paths.get(new URL(“/// C:”+ filename).toURI());' 它适用于两个系统。 – Junge

+0

谢谢你让我知道!你可以把它作为一个答案btw。 – fab

相关问题