加载从外部存储一个文件的InputStream [英] Load a file from external storage to Inputstream

查看:125
本文介绍了加载从外部存储一个文件的InputStream的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的外部目录中的视频文件。我怎么可以加载它的InputStream变量。 暂时我读文件在res /原始文件夹,但我想从SD卡读取它。还有我不知道该文件的名称,但其路径将通过意图来:收到。 检查以下code

 公共类SonicTest扩展活动
{
VideoView videoView;
字符串的URI;
InputStream的音效档;
档案文件;
@覆盖
公共无效的onCreate(包savedInstanceState)
{
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);

}

公共无效戏(查看视图)
{
    新主题(新的Runnable()
    {
        公共无效的run()
        {
            浮动速度=(浮点)1.0;
            浮动间距=(浮点)1.5;
            浮动率=(浮点)1.0;
            URI = Environment.getExternalStorageDirectory()的toString()。
            URI = URI +/ video.3gp;
            AndroidAudioDevice设备=新AndroidAudioDevice(22050,1);
            索尼克声波=新声(22050,1);
            字节样本[]​​ =新的字节[4096];
            字节modifiedSamples [] =新的字节[2048];
            InputStream的音效档= NULL;

    //音效档= getContentResolver()openInputStream(Uri.parse(URI))。
    音效档= getResources()openRawResource(R.raw.video3)。
    Log.i(测试,检查音效档是正确的+音效档);

            INT读取动作;

            如果(音效档!= NULL){
                sonic.setSpeed​​(速度);
                sonic.setPitch(间距);
                sonic.setRate(率);
                做 {
                    尝试 {
                        读取动作= soundFile.read(样品,0,samples.length);
                    }赶上(IOException异常E){
                        e.printStackTrace();
                        返回;
                    }
                    如果(读取动作大于0){
                        sonic.putBytes(样品,读取动作);
                    } 其他 {
                        sonic.flush();
                    }
                    INT可用= sonic.availableBytes();
                    如果(得大于0){
                        如果(modifiedSamples.length<可用){
                            modifiedSamples =新的字节[可用* 2];
                        }
                        sonic.receiveBytes(modifiedSamples,可用);
                        device.writeSamples(modifiedSamples,可用);
                    }
                }而(读取动作大于0);
                device.flush();
            }
        }
    } )。开始();
}}
 

解决方案

尝试

 档案文件=新的文件(Uri.toString());
的FileInputStream的FileInputStream =新的FileInputStream(文件);
 

然后就可以从流中读取。

i have a video file in my external directory. how can i load it to inputstream variable. For the time being i am reading file in the res/raw folder but i want to read it from the sdcard. also i dont know about the name of the file but its path will be recieved through intent. check the following code

public class SonicTest extends Activity
{
VideoView videoView;
String uri;
InputStream soundFile;
File file;
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);                      
    setContentView(R.layout.main);

}

public void play(View view)
{
    new Thread(new Runnable() 
    {
        public void run()
        {
            float speed= (float) 1.0;
            float pitch= (float) 1.5;
            float rate= (float) 1.0;
            uri= Environment.getExternalStorageDirectory().toString();
            uri=uri+"/video.3gp";
            AndroidAudioDevice device = new AndroidAudioDevice(22050, 1);
            Sonic sonic = new Sonic(22050, 1);
            byte samples[] = new byte[4096];
            byte modifiedSamples[] = new byte[2048];
            InputStream soundFile = null;

    //soundFile = getContentResolver().openInputStream(Uri.parse(uri));
    soundFile=getResources().openRawResource(R.raw.video3);
    Log.i("testing","check if SoundFile is correct "+soundFile);

            int bytesRead;

            if(soundFile != null) {
                sonic.setSpeed(speed);
                sonic.setPitch(pitch);
                sonic.setRate(rate);
                do {
                    try {
                        bytesRead = soundFile.read(samples, 0, samples.length);
                    } catch (IOException e) {
                        e.printStackTrace();
                        return;
                    }
                    if(bytesRead > 0) {
                        sonic.putBytes(samples, bytesRead);
                    } else {
                        sonic.flush();
                    }
                    int available = sonic.availableBytes(); 
                    if(available > 0) {
                        if(modifiedSamples.length < available) {
                            modifiedSamples = new byte[available*2];
                        }
                        sonic.receiveBytes(modifiedSamples, available);
                        device.writeSamples(modifiedSamples, available);
                    }
                } while(bytesRead > 0);
                device.flush();
            }
        }
    } ).start();
}}

解决方案

Try

File file = new File(Uri.toString());
FileInputStream fileInputStream = new FileInputStream(file);

Then you can read from the stream.

这篇关于加载从外部存储一个文件的InputStream的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆