Java 如何将FileInputStream获取到资产文件夹中的文件
我知道如何使用Java 如何将FileInputStream获取到资产文件夹中的文件,java,android,nio,android-resources,Java,Android,Nio,Android Resources,我知道如何使用AssetManager从res/raw目录中读取带有InputStream的文件,但对于我的特殊用例,我需要一个FileInputStream。我需要一个FileInputStream的原因是,我需要通过调用getChannel()从中获取FileChannel对象 这是到目前为止我所拥有的代码,它从文件中读取数据(在我的例子中是原语列表): public static int[] loadByMappedBuffer(Context context, String filena
AssetManager
从res/raw
目录中读取带有InputStream
的文件,但对于我的特殊用例,我需要一个FileInputStream
。我需要一个FileInputStream
的原因是,我需要通过调用getChannel()
从中获取FileChannel
对象
这是到目前为止我所拥有的代码,它从文件中读取数据(在我的例子中是原语列表):
public static int[] loadByMappedBuffer(Context context, String filename) throws IOException{
FileInputStream fis = context.openFileInput(filename);
FileChannel ch = fis.getChannel();
MappedByteBuffer mbuff = ch.map(MapMode.READ_ONLY, 0, ch.size());
IntBuffer ibuff = mbuff.asIntBuffer();
int[] array = new int[ibuff.limit()];
ibuff.get(array);
fis.close();
ch.close();
return array;
}
我曾试图从Uri
创建文件
,但这只会导致文件NotFoundException
:
Uri uri = Uri.parse("android.resource://com.example.empty/raw/file");
File file = new File(uri.getPath());
FileInputStream fis = new FileInputStream(file);
是否有一种方法可以将FileInputStream
获取到res/raw
目录中的文件中?您可以将FileInputStream
获取到资产中的资源中,如下所示:
AssetFileDescriptor fileDescriptor = assetManager.openFd(fileName);
FileInputStream stream = fileDescriptor.createInputStream();
AssetFileDescriptor assetFileDescriptor = assetManager.openFd(fileName);
FileDescriptor fileDescriptor = assetFileDescriptor.getFileDescriptor();
FileInputStream stream = new FileInputStream(fileDescriptor);
提供给openFd()
的fileName
应该是资产的相对路径,与提供给open()
的fileName
相同
或者,您也可以像下面这样创建FileInputStream
:
AssetFileDescriptor fileDescriptor = assetManager.openFd(fileName);
FileInputStream stream = fileDescriptor.createInputStream();
AssetFileDescriptor assetFileDescriptor = assetManager.openFd(fileName);
FileDescriptor fileDescriptor = assetFileDescriptor.getFileDescriptor();
FileInputStream stream = new FileInputStream(fileDescriptor);
我认为你的URL是个问题。你应该从资产目录中添加。所以你只需要把文件内容读成int数组?我说的对吗?@Ayzen是的,但我需要让它快速,方法是,我给它读80K*4字节,然后在我的计算机上以6-7毫秒的时间将它转换为int数组PC@KristyWelsh我还尝试了Uri=Uri.parse(“android”)。resource://com.example.empty/“+R.raw.file)代码>尝试以下操作:InputStream myInput=myContext.getAssets()。打开(您的文件名),您可以使用getAssets()
获取assetManager