我目前正在从事一个java项目,在这个项目中,我必须打开存储在src旁边的数据目录中的文件。
当我从eclipse启动程序时,要访问这些文件:我键入 "data/fileName"
而当我使用控制台时,我必须打字 "../data/fileName"
.
(我无法执行 java src/Main
从项目目录中,并获取错误:
Error: Could not find or load main class src.Main.java Caused by: java.lang.ClassNotFoundException: src.Main.java
)
有没有办法让我的程序在控制台和eclipse上都可以运行?
给出一些上下文:我通常打算只在eclipse上运行,但是在从eclipse启动nano时遇到了问题($term variable,redirecting pipes to dev/tty also),所以控制台执行已经成为一个需求。
我不能更改我的eclipse配置,因为这个项目不会在我的计算机上运行,如果因为默认的eclipse设置而无法运行,那么。。。
谢谢你的回复。
热忱地。
1条答案
按热度按时间hk8txs481#
对。别把那些文件放在那儿。有两大类:
只读数据与类文件一样是应用程序的一部分。想想‘state’下拉列表中的美国州列表’、‘在我的用户界面上显示的png图标’、‘一个包含一堆sql的文件,用来初始化一个空数据库’,等等。
为此,正确的方法是
YourClass.class.getResourceAsStream("foo.txt")
,它将为您提供一个用于读取文件“foo.txt”的输入流,该文件与“yourclass.class”位于同一位置。例如,即使它在jar文件中。这意味着作为构建的一部分,这些文件需要放在jar中。eclipse有限的构建系统可以做到这一点。如果你作为一个程序员升级并使用一个构建系统(你应该在这里升级),把它们放在src/main/resources中,构建系统应该会处理它。
或者,第二类:用户应该编辑的文件,或者应用程序需要修改的文件。
这些文件不会靠近jar文件;可执行文件和用户可编辑的内容应该彼此不太接近。这些应该在用户home dir中,您可以使用
System.getProperty("user.home")
.注意,要运行java的东西,“src”根本不应该是故事的一部分,
java
无法运行源文件,只能运行类文件。另外,参数不是dir,而是类名。java -cp path/to/your/app.jar com.foo.pkg.YourClass
是如何运行java代码,而不是java src/Main
.