我需要枚举包中的所有类并将它们添加到List中.单个类的非动态版本如下:
List allClasses = new ArrayList();
allClasses.add(String.class);
Run Code Online (Sandbox Code Playgroud)
如何动态地添加包中的所有类及其所有子包?
更新:在阅读了早期答案之后,我试图解决另一个次要问题是绝对正确的,所以让我说明一下.我知道这是可能的,因为其他工具可以做到这一点.在这里查看新问题.
更新:再次阅读本文,我可以看到它是如何被误读的.我想在编译后从文件系统中枚举所有MY PROJECT'S类.
我有一个简单的结构:一个包含一批数据的数据jar文件,以及一个使用该数据运行服务的服务jar文件.为了使数据易于替换,我将它们分开,service.jar的classpath包含data.jar所在的目录.
在service.jar中,我使用getResource来加载数据文件.如果数据文件直接位于文件夹中,但是当它们位于data.jar内时失败,则此方法有效;
这失败了:
all
+ globalclasspath
| + data.jar
| + mine.properties
+ daemons
+ service.jar
jsvc -cp globalclasspath:daemons/service.jar (...)
MyClass.class.getClassLoader( ).getResource( "mine.properties" ); // <-- null
Run Code Online (Sandbox Code Playgroud)
但这有效:
all
+ globalclasspath
| + mine.properties
+ daemons
+ service.jar
jsvc -cp globalclasspath:daemons/service.jar (...)
MyClass.class.getClassLoader( ).getResource( "mine.properties" ); // <-- not null
Run Code Online (Sandbox Code Playgroud)
我不想更改类路径(除非我可以将它改为通用的,不依赖于数据jar文件的名称),但是我可以更改getResource字符串(我试过/数据) /mine.properties和/data.jar/mine.properties无济于事.我可以进行更改,以便可以从jar中加载资源吗?
我想在com.example.resources包中读取一堆文本文件.我可以使用以下代码读取单个文件:
InputStream is = MyObject.class.getResourceAsStream("resources/file1.txt")
InputStreamReader sReader = new InputStreamReader(is);
BefferedReader bReader = new BufferedReader(sReader);
...
Run Code Online (Sandbox Code Playgroud)
有没有办法获取文件列表,然后将每个元素传递给getResourceAsStream?
编辑:在ramsinb建议我改变我的代码如下:
BufferedReader br = new BufferedReader(new InputStreamReader(MyObject.class.getResourceAsStream("resources")));
String fileName;
while((fileName = br.readLine()) != null){
// access fileName
}
Run Code Online (Sandbox Code Playgroud) 我在“resource/json/templates”文件夹中有一些 Json 文件。我想读取这些 Json 文件。到目前为止,下面的代码片段允许我在 IDE 中运行程序时执行此操作,但在 jar 中运行程序时失败。
JSONParser parser = new JSONParser();
ClassLoader loader = getClass().getClassLoader();
URL url = loader.getResource(templateDirectory);
String path = url.getPath();
File[] files = new File(path).listFiles();
PipelineTemplateRepo pipelineTemplateRepo = new PipelineTemplateRepoImpl();
File templateFile;
JSONObject templateJson;
PipelineTemplateVo templateFromFile;
PipelineTemplateVo templateFromDB;
String templateName;
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
templateFile = files[i];
templateJson = (JSONObject) parser.parse(new FileReader(templateFile));
//Other logic
}
}
}
catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
多谢。
我需要一个包含在我的Java源代码包中的所有类文件的Class [].
我找不到一个标准的方法来一次性完成它.如果有人可以编写一个函数来获取该列表将非常有用.
Class[] myClasses = yourfunction(); // Return a list of class inside a source package in the currently working project in java
Run Code Online (Sandbox Code Playgroud) 通常我从jar文件中读取资源如下:
getClassLoader().getResource(pTextPath + "/" + pLang +".xml");
Run Code Online (Sandbox Code Playgroud)
我需要从jar文件中的已知文件夹中读取具有特定名称的所有资源.例如,阅读*.xml
插件/资源/文
我可以根据路径和名称模板以某种方式从jar文件列表中获取资源吗?
更新:完全重复从类路径目录获取资源列表请关闭问题.
各种答案(例如,从类路径目录获取资源列表)表明,如果您调用getResourceAsStream目录,返回的流将包含目录中的项目列表,每行一个。这似乎没有记录在ClassLoader Javadoc 中。它是在其他地方指定的,还是只是人们依赖的实现细节?
我需要读取CLASSPATH当前Web应用程序的条目.在CLASSPATH我与此同名的许多文件.我想检查它们在classpath中出现的位置.例如:path:\file.txt;path2:\file.txt....
谢谢您的帮助.
亲切的问候塞巴斯蒂安
我正在使用以下调用来获取流,以便可以找到一些资源的文件名。
Thread.currentThread().getContextClassLoader().getResourceAsStream(...)
Run Code Online (Sandbox Code Playgroud)
当我正常运行代码时,这可以正常工作;如果将资源复制到测试文件夹中,则也可以工作。
如何避免这种重复并使我的测试(通过IDEA运行时)使用main中的资源?
我正在编写一个函数,需要访问资源中的文件夹,并循环遍历所有文件名,如果这些文件符合条件,则加载这些文件。
new File(getClass.getResource("/images/sprites").getPath).listFiles()
Run Code Online (Sandbox Code Playgroud)
返回空指针异常,其中目录树遵循Resources -> images -> sprites ->
请有人指出我正确的方向吗?