2011-12-06 6 views
0

webappのsrc/main/resourcesディレクトリにあるフォルダからファイルのリストを取得しようとしています。誰にも解決策がありますか? 1つの問題は、クラスパスにglassfish.jarだけがあることです。 私はどこから始めることができるのエントリポイントが見つかりません。 これはmavenプロジェクトです。これまでsrc/main/resources/somefolderのJSFアプリケーションリストファイル

よろしく、 ホルガー

+0

全くわかりません。あなたはこれをプログラム的に、あるいは単なるものとしてやりたいのですか?後者の場合は、pkzipなどでwarファイルを開き、その中にナビゲートすることができます。 – DaveRlz

+0

私は、プログラムでファイル名の配列を取得しようとしています。 String []のようにファイル= getFilesFromResourcePath( "targetDirectory"); これらのファイルは/ src/main/resources/targetDirectoryにあります – ITR

+0

なぜそれが欲しいですか?ユニットテストを書いていない限り、これはあまり意味がありません。リソースの下のファイルは、warファイルのルートディレクトリに移動します。したがって、getFilesList( "/ src/main/resources/targetDirectory")は、アプリケーションのデプロイ後は機能しません。 – Federico

答えて

0

ソリューション: 動作しますが、あるため、絶対パスでは、私を満たしていません。

org.apache.commons.io.FileUtilsが含まれている必要があります。

public Collection<File> queryResourceFileCollectionByDirectoryMember(Class clazz, String resourcePathToMember, String[] extensions) { 
    logger.info("------- FileTools : queryResourceFileCollectionByDirectoryMember"); 

    try { 
     //String[] extensions = {"xml"}; 
     URL resourceURL = clazz.getResource(resourcePathToMember);//"/fields/testOITM.xml" <- one XML file in the /src/main/resources/fields/ folder to get the absolutepath which after deployment is WEB-INF/classes/fields 
     String resourcePath = resourceURL.getPath(); 

     //Remove the leading slash 
     String resourcePathWithoutFirstChar = resourcePath.substring(1); 
     logger.log(Level.INFO, "------- FileTools : queryResourceFileCollectionByDirectoryMember: resourcePath :{0} :", resourcePathWithoutFirstChar); 
     File resourceFileToGetDirectory = new File(resourcePathWithoutFirstChar); 
     String resourceDirectoryPath = resourceFileToGetDirectory.getParent() + File.separator; //"c:/Users/xuser/Documents/NetBeansProjects/BOneBApp/target/classes/" 
     File resourceDirectory = new File(resourceDirectoryPath); 
     Collection<File> files = FileUtils.listFiles(resourceDirectory, extensions, true); 
     return files; 
    } catch (Exception e) { 
     logger.log(Level.SEVERE, "******* FileTools : queryResourceFileCollectionByDirectoryMember : {0}", e.getMessage()); 
     return null; 
    } 
} 

clazzには、webappの任意のクラスを使用できます。

よろしく、あなたはここで後にしているものを ホルガー

+0

の配備後に存在するファイルのリストを取得する必要があります。クラスが拡張されていないWAR/JARの内部にある場合、これは機能しません。 – BalusC

+0

そうですが、アプリケーションの要件はこの場合、戦争が爆発するということです。どのようなコード化されていない戦争のための正しいコードでしょうか? – ITR