8

例外は発生していませんが、実行すると...

InputStream deckFile = context.getAssets().open("cards.txt");

そして、deckFile.read() は -1 を返します。ファイルは正しいフォルダにあり、空ではありません。

これは世界で最も簡単なことのはずです...

編集: AssetManager は実際に「cards.txt」をそこにあるとリストしているので、問題にはなりません。

4

3 に答える 3

10

以下のコード行を試してください

InputStream is = getAssets().open("test.txt");
int size = is.available();
byte[] buffer = new byte[size]; //declare the size of the byte array with size of the file
is.read(buffer); //read file
is.close(); //close file

// Store text file data in the string variable
    String str_data = new String(buffer);

使用可能なメソッドは、アセットの合計サイズを返します。

于 2013-01-25T05:26:05.707 に答える
5

/assetsAndroid プロジェクトの下のディレクトリにテキスト ファイルを配置します。AssetManagerクラスを使用してアクセスします。

AssetManager am = context.getAssets();
InputStream is = am.open("test.txt");

または、/res/rawファイルにインデックスが付けられ、R ファイルの ID でアクセスできるディレクトリにファイルを配置することもできます。

InputStream is = getResources().openRawResource(R.raw.test);

編集:

ファイルを読み取るには、次の方法を試してください。

 public String convertStreamToString(InputStream p_is) throws IOException {
    /*
     * To convert the InputStream to String we use the
     * BufferedReader.readLine() method. We iterate until the BufferedReader
     * return null which means there's no more data to read. Each line will
     * appended to a StringBuilder and returned as String.
     */
    if (p_is != null) {
        StringBuilder m_sb = new StringBuilder();
        String m_line;
        try {
            BufferedReader m_reader = new BufferedReader(
                    new InputStreamReader(p_is));
            while ((m_line = m_reader.readLine()) != null) {
                m_sb.append(m_line).append("\n");
            }
        } finally {
            p_is.close();
        }
        Log.e("TAG", m_sb.toString());
        return m_sb.toString();
    } else {
        return "";
    }
}

きっとお役に立ちます。

于 2013-01-25T04:56:42.817 に答える
3

問題は、ファイルが大きすぎて、拡張子が「.txt」であるため圧縮されていたことです。ファイル名を通常圧縮される形式「.mp3」にリネームすることで問題は発生しませんでした

于 2013-01-25T17:59:58.613 に答える