有没有办法用“/”而不是“\”来获取文件的路径?

时间:2021-01-08 18:47:55

标签: java

我正在用 Java 制作一个 HTTP 服务器,以便(在开始时)它在一个目录(及其子目录)中找到所有文件并将它们添加到服务器。但是当获取文件的路径并尝试将其提供给 HttpServer.createContext() 时,它会抛出一个 java.lang.IllegalArgumentException: Illegal value for path or protocol。 (使用字符串参数,说“\folder/index.html”)。为了获得这个值,我使用了

file.getParent().substring(24) + "/" + file.getName()

我使用子字符串是因为我必须排除 Web 服务器所在的文件夹。非法字符是反斜杠。我曾尝试扩展 File 以更改 separatorseparatorChar,但这仅创建了 2 个新变量。虽然使用 String.replace() 似乎没有任何效果。是否有与我可以使用的 File.getParentFile.getPath 不同的方法,或者有没有我没有看到的使用 String.replace 的方法?

编辑: String.replace() 似乎是最好的答案......但我不完全确定如何使用它。

编辑 2:由于某种原因反斜杠没有出现,所以我改变了它。

2 个答案:

答案 0 :(得分:2)

您必须使用 java System.getProperty

请注意,在这种情况下,"file.separator" 是一个 ,我们是 使用 get 来自当前系统执行 java VM 的这个属性。

不要使用斜杠 (/),而应选择平台无关的文件分隔符,例如:

    String separator = System.getProperty("file.separator");
    System.out.println(separator);
    // unix / , windows \

答案 1 :(得分:1)

看看Paths.get(...)

Try Paths.get(".") // 当前工作目录。

或者告诉它,它应该从哪条路径开始:

使用 System.getProperty("user.dir"),作为当前登录用户的主目录。 String pathStr = "/";

Path homeDir = Paths.get(System.getProperty("user.dir"))

从用户目录进入数据目录:homeDir.get("data")

Path dataPath = Paths.get(System.getProperty("user.dir"));
File dataFile = dataPath.toFile();

现在使用 dataFile 上的操作,检查文件系统的那个位置上有哪些文件和目录。