【问题标题】:Reading a Text file from Path beginning with /// and containing a colon从以 /// 开头并包含冒号的路径读取文本文件
【发布时间】:2016-10-03 10:17:54
【问题描述】:

如标题中所述,我正在尝试从作为字符串提供给我的路径中读取文件,该路径位于 Tomcat-Context 文件中。

路径以“///C:”开头。在 Unix 系统上,它将以“/C:”开头。 截至目前,我正在尝试执行以下操作:

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

这会导致此错误:“索引 4 处路径中的非法字符 [:]:///C:/file.json”

我知道 Windows 不喜欢路径中的冒号,但是当我从路径中删除前导 Substirng“///”时,Windows 可以处理它。 (但这并没有真正帮助我,因为这很脆弱,而且是一种非常糟糕的编码方式。而且它在一半的服务器上也不起作用)

我很确定这只是我不理解路径命名约定。 那么这种路径应该如何处理呢?

问候: 荣格

【问题讨论】:

  • 你还应该记住,不是每个人都使用 C:(有些人喜欢 D:)
  • 前导“///C:/”并不是真正的静态字符串。我只是用一个问题代替了它,所以它更容易阅读。实际上,这将由服务器的上下文设置。不过谢谢你的帮助。

标签: java tomcat path


【解决方案1】:

我的错误是,我没有将收到的 URL 视为 URL。 以下代码 sn-p 成功了:

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

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

【讨论】:

    【解决方案2】:

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

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

    如果您在 Windows 上为真,在另一个(Linux/OS X)上为假

    然后,您必须在传递文件路径时检查您是否在 Windows 上。如果它是真的一个 substring() 是必要的(例如:传递“C:”而不是“///C:”),否则为其他操作系统提供它:

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

    【讨论】:

    • 嘿,谢谢。也许这行得通,我最近发现,如果你得到一个 URL,你应该把它当作一个而不是一个简单的字符串。以下代码 sn-p 成功了:MyPath = Paths.get( new URL("///C:" + filename).toURI() ); 它适用于两个系统。
    • 感谢您告诉我!顺便说一句,您可以将其作为答案。
    猜你喜欢
    • 2014-10-21
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2019-11-14
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多