在构建的应用程序中获取资源

时间:2016-06-02 18:05:31

标签: java

我希望在我的应用程序运行时获取文件夹中的文件,所以我知道我需要将其作为资源,如果我将其作为文件,它将无法工作,所以它就是我做的。

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,我的意思是,数据不是我预期的位置。

1 个答案:

答案 0 :(得分:2)

以下示例演示如何从当前runnable jar文件中的目录中获取文件并读取这些文件内容。

假设您有一个名为" FolderTestApp"的NetBeans项目。执行以下步骤:

  1. 在项目根文件夹FolderTestApp\中创建文件夹myFiles
  2. catalogos文件夹复制到FolderTestApp\myFiles\
  3. files in the project structure

    在生成项目jar时,

    myFiles文件夹是保存jar文件结构中catalogos文件夹所必需的。 <{1}}文件夹将从jar文件中消失,但myFiles文件夹将保留。

    catalogos folder in generated jar file

    如果您不执行这些步骤,并将catalogos直接放在项目文件夹中(而不是myFiles的子文件夹),那么您的catalogos文件夹中的文件将被放置到您的根目录中jar文件。

    1. 在netbeans项目属性中添加catalogos文件夹作为源文件夹。
    2. adding folder to the source folders list

      假设您的属性文件包含以下内容:

      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("---------------------------------------"); } } } 部分)中的主类。

      main class setup

      通过菜单构建您的项目:Run

      在构建项目时,打开生成的jar所在的Run - Build文件夹并运行此jar文件:

      running the generated jar file

      那就是:)