这真是让我百思不得其解。
在我的 Eclipse 工作区中,我有一个名为“Java 暂存器”的项目。在“包资源管理器”中,您会看到“src”(源文件夹),然后是“根”(包)。在“root”下是一个名为“LoggingTest.java”的.java 文件。
所以这个java文件的路径是“G:\My Documents\software projects\workspace\Java scratchpad\src\root\LoggingTest.java”。
当我在 Eclipse 中运行以下代码时:
Path currentRelativePath = Paths.get("");
String s_currRelPath = currentRelativePath.toAbsolutePath().toString();
String pathWithForwardSlashes = s_currRelPath.replace( "\\", "/" );
System.out.println( "path " + pathWithForwardSlashes );
结果是
路径 G:/我的文档/软件项目/工作区/Java 暂存器
但是......当我在命令提示符处运行相同的代码时,我必须从以下目录开始:
G:\我的文档\软件项目\工作区\Java暂存器\ bin
...然后java root.LoggingTest
在提示符处转到 >。
上述代码的输出是:
路径 G:/我的文档/软件项目/工作区/Java 暂存器/ bin
换句话说,当您在命令提示符处运行该东西时,您正在运行 \bin 目录下的一个 .class 文件,但是当您在 Eclipse 中运行时,Eclipse 框架“假装”该 bin 目录不存在。
结果是,根据我是在 Eclipse 中运行还是在命令提示符下运行,我得到了“当前相对路径”(CWD)的不同值。如果我想创建或使用相对于 CWD 的目录,我将获得不同的值,具体取决于我是在 Eclipse 中运行还是在命令提示符下运行。
我今晚感觉很慢。我该怎么办?有没有办法检测项目是在 Eclipse 中还是在命令提示符下运行?或者我应该简单地尝试检测路径是否以“\bin”结尾并删除这四个字符以使路径等效?
之后
只需添加注释以回复 E-Riz 的评论:
这是一件简单的事情:我想创建日志,我想创建 Lucene 索引......并将东西保存在一个位置(无论如何在这个阶段)我只想将此输出...\Java scratchpad\output\indices\[name of index]
分别放在一个位置,例如 or ...\Java scratchpad\output\logging\[name of log]
。
而且,是的,当然,目前我确实知道这里涉及的绝对路径......但是,顾名思义,这是一个“便签本”或测试区域......所以这段代码使用 CWD 来确定在哪里put 或 find 日志或索引可以更通用地使用,而不必知道所涉及的绝对路径。
但它必须在 Eclipse 或命令提示符下工作......!
注意,我目前的解决方法确实是检查是否pathWithForwardSlashes
以“\bin”结尾,如果是,则删除最后 4 个字符。我不可能是唯一遇到这种怪事的人。打赌有更聪明的解决方案!