将文件从外部存储加载到 Inputstream
Posted
技术标签:
【中文标题】将文件从外部存储加载到 Inputstream【英文标题】:Load a file from external storage to Inputstream 【发布时间】:2013-03-17 05:37:20 【问题描述】:我的外部目录中有一个视频文件。我怎样才能将它加载到输入流变量。 目前我正在读取 res/raw 文件夹中的文件,但我想从 sdcard 中读取它。我也不知道文件的名称,但它的路径将通过意图接收。 检查以下代码
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();
【问题讨论】:
所有三个答案都无法理解 URI 是什么,并且它们并不总是文件路径。如果您有文件路径,您会自己弄清楚,但发布的答案并不能回答实际问题。 【参考方案1】:试试
File file = new File(Uri.toString());
FileInputStream fileInputStream = new FileInputStream(file);
然后你可以从流中读取。
【讨论】:
感谢它的工作。但我不能在这里有太多的噪音。知道为什么会这样吗? 注意:此答案仅适用于 OP 的问题(OP 的 uri 是文件路径)。在更一般的情况下, Uri.toString() 不一定返回文件路径(uri 可以是内容路径或 url 等)。此方法仅适用于作为文件路径的 Uri。检查这个问题的答案:***.com/questions/5657411/… 那么问题的标题是“从外部存储加载文件”。我认为在这种情况下假设传入的 uri 是一个文件是安全的。【参考方案2】:String fileName = "OfflineMap/maps.xml";
String path = Environment.getExternalStorageDirectory()+"/"+fileName;
File file = new File(path);
FileInputStream fileInputStream = new FileInputStream(file);
【讨论】:
【参考方案3】:这是一个工作代码,你可以将 InputStream 与一个存储文件:
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard,"Demo.xml");
InputStream fileInputStream = new FileInputStream(file);
【讨论】:
【参考方案4】:soundFile = openFileInput(uri);
【讨论】:
以上是关于将文件从外部存储加载到 Inputstream的主要内容,如果未能解决你的问题,请参考以下文章
Polybase:将数据从外部表加载到特定日期/时间范围的根 blob 文件夹