Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将FileInputStream获取到资产文件夹中的文件_Java_Android_Nio_Android Resources - Fatal编程技术网

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