我希望在我的应用程序运行时获取文件夹中的文件,所以我知道我需要将其作为资源,如果我将其作为文件,它将无法工作,所以它就是我做的。
QRegExp("(?:^\\s*)([a-z0-9]+):", Qt::CaseInsensitive);
我想要做的是,获取文件夹(jaxbContext = JAXBContext.newInstance(Catalogo.class);
jaxbUnmarshaller = jaxbContext.createUnmarshaller();
InputStream resourceAsStream = getClass().getClassLoader().getResourceAsStream("catalogos/");
BufferedReader br = new BufferedReader(new InputStreamReader(resourceAsStream));
String line;
try {
while((line = br.readLine()) != null){
InputStream resourceAsStream1 = getClass().getClassLoader().getResourceAsStream("catalogos/"+line);
tempCat = (Catalogo) jaxbUnmarshaller.unmarshal(resourceAsStream1);
if(tempCat != null){
codigoCurso = String.valueOf(tempCat.getCourse().getId());
nomeDoCurso = dados.get(codigoCurso);
anoCatalogo = String.valueOf(tempCat.getAno());
if(nomeDoCurso == null){
dados.put(codigoCurso, tempCat.getCourse().getNome());
}
anos.add(anoCatalogo);
}
}
)内的所有文件,然后遍历并解组每个文件到一个对象,这样我就可以访问我需要的属性了。因此,当我使用netbeans运行时,效果很好,但是当我构建并运行jar时,我得不到相同的结果我使用netbeans,我的意思是,数据不是我预期的位置。
答案 0 :(得分:2)
以下示例演示如何从当前runnable jar文件中的目录中获取文件并读取这些文件内容。
假设您有一个名为" FolderTestApp"的NetBeans项目。执行以下步骤:
FolderTestApp\
中创建文件夹myFiles
。catalogos
文件夹复制到FolderTestApp\myFiles\
myFiles
文件夹是保存jar文件结构中catalogos
文件夹所必需的。 <{1}}文件夹将从jar文件中消失,但myFiles
文件夹将保留。
如果您不执行这些步骤,并将catalogos
直接放在项目文件夹中(而不是myFiles的子文件夹),那么您的catalogos文件夹中的文件将被放置到您的根目录中jar文件。
catalogos
文件夹作为源文件夹。假设您的属性文件包含以下内容:
file1.properties:
myFiles
file2.properties:
key11=value11
key12=value12
key13=value13
请注意,以下代码未经过优化。这是一个简单明了的概念证明,如何解决你的任务。
将以下类添加到项目中:
key21=value21
key22=value22
key23=value23
将此类设置为项目设置(package folderapp;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.util.Properties;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class FolderTestApp {
public static void main(String[] args) throws URISyntaxException, IOException {
new FolderTestApp();
}
public FolderTestApp() throws URISyntaxException, IOException {
// determining the running jar file location
String jarFilePath = getClass().getProtectionDomain().
getCodeSource().getLocation().toURI().getPath();
// note, that the starting / is removed
// because zip entries won't start with this symbol
String zipEntryFolder = "catalogos/";
try (ZipInputStream zipInputStream
= new ZipInputStream(new FileInputStream(jarFilePath))) {
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
System.out.println("processing: " + zipEntry.getName());
if (zipEntry.getName().startsWith(zipEntryFolder)) {
// directory "catalogos" will appear as a zip-entry
// and we're checking this condition
if (!zipEntry.isDirectory()) {
// adding symbol / because it is required for getResourceAsStream() call
printProperties("/" + zipEntry.getName());
}
}
zipEntry = zipInputStream.getNextEntry();
}
}
}
public void printProperties(String path) throws IOException {
try (InputStream is = getClass().getResourceAsStream(path)) {
InputStreamReader fr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(fr);
Properties properties = new Properties();
properties.load(br);
System.out.println("contents from: " + path + "\n");
Set<Object> keySet = properties.keySet();
for (Object key : keySet) {
System.out.println(key + " = " + properties.get(key));
}
System.out.println("---------------------------------------");
}
}
}
部分)中的主类。
通过菜单构建您的项目:Run
。
在构建项目时,打开生成的jar所在的Run - Build
文件夹并运行此jar文件:
那就是:)