我正在用 Java 制作一个 HTTP 服务器,以便(在开始时)它在一个目录(及其子目录)中找到所有文件并将它们添加到服务器。但是当获取文件的路径并尝试将其提供给 HttpServer.createContext() 时,它会抛出一个 java.lang.IllegalArgumentException: Illegal value for path or protocol
。 (使用字符串参数,说“\folder/index.html”)。为了获得这个值,我使用了
file.getParent().substring(24) + "/" + file.getName()
我使用子字符串是因为我必须排除 Web 服务器所在的文件夹。非法字符是反斜杠。我曾尝试扩展 File 以更改 separator
和 separatorChar
,但这仅创建了 2 个新变量。虽然使用 String.replace() 似乎没有任何效果。是否有与我可以使用的 File.getParent
或 File.getPath
不同的方法,或者有没有我没有看到的使用 String.replace
的方法?
编辑: String.replace() 似乎是最好的答案......但我不完全确定如何使用它。
编辑 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 上的操作,检查文件系统的那个位置上有哪些文件和目录。