2

Google App Engine (GAE) では、次のようないくつかの方法を使用して、展開された WAR 内の任意のファイルを読み取ることができることを理解しています。

String file = "/WEB-INF/name-of-my-filexml";
InputStream in = getClass().getResourceAsStream(file);

問題は、次のようなディレクトリ構造で Web アプリをデプロイする必要があることです。

MyApp/
    WEB-INF/
        lib/
        classes/
        web.xml
        appengine-web.xml
        ...

        profiles/
            fizz.txt
            buzz.txt
            foo.txt
            ... dozens of other text files

profiles/*.txtファイルを Java 文字列に読み込む方法が必要です。そして、誰かがコメントする前に、なぜ文字列をハードコーディングしないのか...、簡単な質問を投稿するために、ここで多くのバックストーリーを切り取っているとだけ言っておきましょう。冗談で、文字列をハードコーディングできないふりをしましょう。通常、 へのフル アクセスがあれば、java.io.*次のようにします。

File profilesHome = new File("path/to/profiles");
File[] profiles = profilesHome.listFiles();
List<String> profileList = new ArrayList<String>();
for(File profile : profiles)
    profileList.add(readFileIntoString(profile));

しかし、ここでは、 を呼び出すことができないと思いますFile#listFiles()。また、InputStreamから返されるしかない場合、それをハンドルまたは String オブジェクトgetClass().getResourceAsStream(file)に変換する方法がわかりません。File何か案は?前もって感謝します。

更新:ZipInputStream提案を使用:

InputStream inputStream = event.getServletContext()
        .getResourceAsStream("/WEB-INF/profiles.zip");
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
List<String> list = new ArrayList<String>();
ZipEntry currEntry;
try {
    while((currEntry = zipInputStream.getNextEntry()) != null)
        // TODO: How to convert the contents of currEntry to a string
        // in a manner that is GAE-friendly?
        list.add(convertEntryContentsToString(currEntry));
} catch (IOException e) {
    e.printStackTrace();
}

さて、どのように実装しconvertEntryContentsToString(ZipEntry)ますか?

4

3 に答える 3

1

次のオプションが機能するかどうかを確認してください。

  1. 、という名前のファイルを作成します。このファイルは、フォルダーまたは。から始まる他のフォルダーfilelist.txtにも存在します。このファイルには、フォルダーに存在するファイル名のリストを含めることができます。各行に1つのファイル名。このようにして、名前を1つずつ解析してから、ファイルを読み取ることができます。WEB-INF/profileswEB-INF/profiles
  2. 予期するファイル名のリストを含むデータストアエンティティを作成し、ファイル名のリストがデータストアエンティティから取得されることを除いて、1と同じ手順に従います。
  3. Googleドライブ(このAppEngineとGoogleDrive APIを参照)はオプションですか?もう1つのオプションは、GoogleCloudStorageです。
于 2013-02-20T14:13:49.400 に答える
0

すべての .txt を単一の Zip ファイルに入れることができる場合は、ZipInputStream と ZipEntry を使用して、Zip ファイル内のすべてのファイルを一覧表示できます (または、必要に応じて直接アクセスできます)。

于 2013-02-20T14:00:50.687 に答える