与Eclipse中的\ bin目录有关

时间:2016-04-16 19:28:04

标签: java eclipse command-prompt cwd

这让我感到困惑。

在我的Eclipse工作区中,我有一个名为" Java scratchpad"的项目。在" Package Explorer"你看" src" (源文件夹)在此下,然后" root" (包)。在" 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:\ My Documents \ software projects \ workspace \ Java scratchpad \ bin

...然后去>提示时java root.LoggingTest

以上代码的输出是:

  

路径G:/我的文档/软件项目/工作区/ Java暂存器/ bin

换句话说,当您在命令提示符下运行该事物时,您正在\ bin目录下运行.class文件,但是当您在Eclipse中运行时,Eclipse框架"假装" bin目录不存在。

结果是我得到了当前相对路径的不同值#34; (CWD)取决于我是在Eclipse中运行还是在命令提示符下运行。如果我想创建或使用相对于CWD的目录,我将根据我是在Eclipse中运行还是在命令提示符下运行来获得不同的值。

我今晚感觉很慢。我该怎么办?有没有办法检测项目是在Eclipse中运行还是在命令提示符下运行?或者我应该只是尝试检测路径是否以" \ bin"并删除这四个字符以使路径等效?

只需添加一条注释即可回复E-Riz的评论:

这很简单:我想创建日志,我想创建Lucene索引......并将事物保存在一个位置(无论如何在此阶段)我只想将此输出放在这样的位置分别为...\Java scratchpad\output\indices\[name of index]...\Java scratchpad\output\logging\[name of log]

而且,是的,当然,目前我确实知道这里涉及的绝对路径......但是,顾名思义,这是一个"暂存器"或者测试区域......所以这个使用CWD来确定放置或查找日志或索引的位置的代码可以更普遍地使用,而不必知道所涉及的绝对路径。

但它必须在Eclipse或命令提示符下工作......!

注意我当前的解决方法确实是检查pathWithForwardSlashes是否以" \ bin"结束,如果是,则删除最后4个字符。我无法成为唯一遇到这种奇怪现象的人。打赌有更聪明的解决方案!

1 个答案:

答案 0 :(得分:1)

您应该了解或记住几个事实:

  • 在运行时,Java可以(应该)被赋予一个类路径来使用;默认的应用程序类路径只是.(调用java的当前目录)。这就是为什么你似乎必须从你项目的\bin目录运行你的程序;因为你还没有告诉JVM在其他任何地方寻找课程。运行应用程序时应该是setting the runtime classpath,这可以通过多种方式完成,但对于简单程序,通常通过批处理文件或shell脚本完成。请注意,当您依赖任何JAR时,使用-cp指定类路径将是至关重要的。
  • 在Eclipse中,由于应用程序不是通过命令行运行的,因此Eclipse具有启动配置,其中包含启动程序所需的所有详细信息(在"运行"或"调试& #34;模式)。 Here's a decent tutorial(虽然有点过时;您可以在Interwebs上找到有关启动配置的更多信息。您正在寻找的关键配置是在 Arguments 标签上,您可以在其中指定程序启动配置的工作目录。默认是项目的根目录。看看它与您在命令行上运行时的情况有何不同?您在输出中看到的差异。您可以在Eclipse启动配置中更改工作目录,但我倾向于将其保留为项目根目录。

因此,您有几个选项可以使事情保持一致:使用脚本/批处理在命令行上运行您的应用程序,指定-cp以便JVM知道您的类文件在哪里(以及任何其他文件)它也可能需要JARs);或者,重新配置Eclipse启动以匹配您在命令行上运行的位置。我认为(到目前为止)更好的选择是第一个。

说了这么多,当谈到Java中的文件/资源​​时,通常不需要做任何路径操作。一切都与运行Java的当前工作目录或类路径相关。