编译java项目后,eclipse源文件丢失

时间:2015-01-12 14:21:44

标签: java eclipse embedded-resource

我在windows8 64位和windows vista 32位上使用eclipse luna。它也是同样的问题。我的程序在eclipse IDE中运行良好,但在编译时我得到了这个例外:

c:\ users \ Preben \ Desktop \ test \ src \ resource \ default.bws(找不到路径)

其中'test'是桌面上的文件夹,'default.bws'是要处理的文件。

'resource'文件夹也作为projects bin文件夹中的子文件夹存在。

在.classpath文件中这行'classpathentry kind =“src”path =“src”/'。

在eclipse'project-> properties->标签'Source'中的Java Build Path'是'projectname / src'行。

我不时用Google搜索数小时才找到解决方案。有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:1)

只要可以从类路径访问该文件,您就可以使用classLoader轻松获取它,而不是使用绝对路径(这总是一个坏主意)

  

=中的InputStream   。ClassPathTest.class.getClassLoader()的getResourceAsStream(" default.bws&#34);

答案 1 :(得分:0)

“编译时我得到此异常”是否意味着从命令行执行编译程序时会导致错误?

如果是这样,我怀疑它是如何在Windows中指定路径,并可能建议:

  • 不使用桌面,但使用简单目录作为项目位置路径,例如C:\ Project,不包含任何空格。
  • 验证程序中default.bws文件的路径规范。可以使用/Project/src/resource/default.bws而不是Windows路径格式。 Java运行时应该将C:\视为/.

答案 2 :(得分:0)

总之,我发现在连接资源时,在文件地址中使用正斜杠非常重要:

public class TestOfForwardAndBackwardSlashes {

/**
 * Eclipse Luna and Windows 8.1: Test use of forward and backward slashes. 
 * Conclusion: Use forward slashes for resources.
 */
public TestOfForwardAndBackwardSlashes() {
    try {

        InputStream in = this.getClass().getClassLoader()
                // Forward slashes ok both in IDE and when compiled
                .getResourceAsStream("resource/default.bws"); 
                // Backward slashes only ok in IDE                              
                // .getResourceAsStream("resource\\default.bws");

        OutputStream out = new FileOutputStream(new File(
                // Forward slashes ok both in IDE and when compiled                 
                "C:/test/default.bws")); // Ok both in IDE and compiled
                // Backward slashes ok both in IDE and when compiled                    
                // "C:\\test\\default.bws"));

        byte[] buffer = new byte[1024];
        int bytesRead = 0;
        while ((bytesRead = in.read(buffer)) != -1) {
            out.write(buffer, 0, bytesRead);
        }

        in.close();
        out.close();
        System.out.println("File copied.");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (NullPointerException e) {
        e.printStackTrace();
    } catch (IndexOutOfBoundsException e) {
        e.printStackTrace();
    }
}

}