10

ファイルオブジェクトを渡す必要があるjarファイルがあります。リソースまたはアセットをそのメソッドにファイル オブジェクトとして渡すにはどうすればよいですか?

プロジェクト フォルダー内のアセットまたは生ファイルをファイル オブジェクトに変換する方法を教えてください。

4

3 に答える 3

5

これが私がしたことです:

アセット ファイルを SDCard にコピーします。

AssetManager assetManager = context.getResources().getAssets();

String[] files = null;

try {
    files = assetManager.list("ringtone"); //ringtone is folder name
} catch (Exception e) {
    Log.e(LOG_TAG, "ERROR: " + e.toString());
}

for (int i = 0; i < files.length; i++) {
    InputStream in = null;
    OutputStream out = null;
    try {
        in = assetManager.open("ringtone/" + files[i]);
        out = new FileOutputStream(basepath + "/ringtone/" + files[i]);

        byte[] buffer = new byte[65536 * 2];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;
        Log.d(LOG_TAG, "Ringtone File Copied in SD Card");
    } catch (Exception e) {
        Log.e(LOG_TAG, "ERROR: " + e.toString());
    }
}

次に、パスでファイルを読み取ります。

File ringFile = new File(Environment.getExternalStorageDirectory().toString() + "/ringtone", "fileName.mp3");

ほらね。アセット ファイルのファイル オブジェクトのコピーがあります。お役に立てれば。

于 2012-06-07T11:33:28.170 に答える
4

生ファイルをファイルに読み込む。

    InputStream ins = getResources().openRawResource(R.raw.my_db_file);
    ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
    int size = 0;
    // Read the entire resource into a local byte buffer.
    byte[] buffer = new byte[1024];
    while((size=ins.read(buffer,0,1024))>=0){
      outputStream.write(buffer,0,size);
    }
    ins.close();
    buffer=outputStream.toByteArray();

    FileOutputStream fos = new FileOutputStream("mycopy.db");
    fos.write(buffer);
    fos.close();

OutOfMemory を回避するには、次のロジックを適用します。

一度にすべてのデータを含む巨大な ByteBuffer を作成しないでください。はるかに小さい ByteBuffer を作成し、データを入力してから、このデータを FileChannel に書き込みます。次に、ByteBuffer をリセットし、すべてのデータが書き込まれるまで続行します。

于 2012-06-07T11:32:03.060 に答える
0

私は実際のFileオブジェクトを取得する方法を知りませんが、FileDescriptorで作業できる場合は、次のことができます。

FileDescriptor fd = getAssets().openFd(assetFileName).getFileDescriptor();
于 2012-06-07T11:29:25.230 に答える