8

文字列のリストを含むファイルを読み取る必要があります。この投稿のアドバイスに従うようにしています。どちらのソリューションも を使用する必要がありますが、パラメーターとしてFileUtils.readLinesaStringではなく aを使用Fileします。

Set<String> lines = new HashSet<String>(FileUtils.readLines("foo.txt"));

が必要Fileです。

OPがファイルを完全に使用することを思いとどまらせたことを除いて、この投稿は私の質問です。Apache メソッドを使用する場合は、ファイルが必要です。これは、最初の問題に対する私の推奨ソリューションです。

私のファイルは小さく (100 行程度)、プログラム インスタンスごとにシングルトンであるため、ファイルの別のコピーがメモリに存在することを心配する必要はありません。したがって、より基本的な方法を使用してファイルを読み取ることができますが、これまでのところ、FileUtils.readLinesはるかにクリーンなように見えます。リソースからファイルに移動するにはどうすればよいですか。

4

3 に答える 3

2

読みたいファイルはクラスパス上の真のリソースであり、単にnew File("path_to_file");.

を使用して次のことを試してくださいClassLoader。ここで、resourceStringクラスパス内のリソース ファイルへのパスの表現です。

の有効なStringresourceは次のとおりです。

  • "foo.txt"
  • "com/company/bar.txt"
  • "com\\company\\bar.txt"
  • "\\com\\company\\bar.txt"

およびパスはに限定されませんcom.company

FileJAR にないものを取得するための関連コード:

File file = null;

try {

    URL url = null;
    ClassLoader classLoader = {YourClass}.class.getClassLoader(); 

    if (classLoader != null) {

        url = classLoader.getResource(resource);
    }

    if (url == null) {

        url = ClassLoader.getSystemResource(resource);
    }

    if (url != null) {

        try {

            file = new File(url.toURI());

        } catch (URISyntaxException e) {

            file = new File(url.getPath());
        }
    }

} catch (Exception ex) { /* handle it */ }

// file may be null

または、リソースが JAR にある場合は、 を使用 Class.getResourceAsStream(resource);してファイルを循環し、BufferedReaderへの呼び出しをシミュレートする必要がありreadLines()ます。

于 2013-08-28T20:32:07.383 に答える
0

リソースを使用してファイルを文字列に読み取ります。

String contents = 
 FileUtils.readFileToString(
  new File(this.getClass().getResource("/myfile.log").toURI()));

入力ストリームを使用:

List<String> listContents = 
 IOUtils.readLines(
  this.getClass().getResourceAsStream("/myfile.log"));
于 2014-08-29T18:20:07.610 に答える