加载从外部存储一个文件的InputStream [英] Load a file from external storage to Inputstream
本文介绍了加载从外部存储一个文件的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屋!
查看全文