我正在尝试简单检查文件是否存在。我在这里看到了类似的问题,但他们没有帮助。当我运行我的应用程序时,应用程序崩溃,我得到消息“不幸的是,fileCheck1已经停止”。我在模拟器和智能手机上都出现了这个错误。
我的代码:
package com.example.fileCheck1;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.TextView;
import java.io.File;
public class MyActivity extends Activity {
TextView msgText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
msgText = (TextView) findViewById(R.id.textView);
String Path = Environment.getExternalStorageDirectory().getPath()+"/ping.xml";
File file = getBaseContext().getFileStreamPath(Path);
if(file.exists()){
msgText.setText("Found");
}
if(!file.exists()){
msgText.setText("Not Found");
}
}
}
在我的Manifest中有这样的权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
提前致谢。
答案 0 :(得分:3)
我认为问题出在这里:
getBaseContext()
将其分配给 NULL
。你真的不需要这条线。您可以通过
String path = Environment.getExternalStorageDirectory().getPath() + "/ping.xml";
File f = new File(path);
if (f.exists()) {
// do your stuff
}
else {
// do your stuff
}
如果您或其他人拥有三星Galaxy S3,请关注@ Raghunandan的回答,因为在这种情况下getExternalStorageDirectory()
会返回内部内存。
答案 1 :(得分:3)
我有三星galaxy s3与android 4.1.2。我的内部手机内存名为sdcard0,外部卡名为extSdCard。
Environment.getExternalStorageDirectory()
因此上面返回sdcard0的路径,即内部手机内存
因此,获取您可以使用下面的实际路径
String externalpath = new String();
String internalpath = new String();
public void getExternalMounts() {
Runtime runtime = Runtime.getRuntime();
try
{
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
if (line.contains("secure")) continue;
if (line.contains("asec")) continue;
if (line.contains("fat")) {//external card
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
externalpath = externalpath.concat("*" + columns[1] + "\n");
}
}
else if (line.contains("fuse")) {//internal storage
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
internalpath = internalpath.concat(columns[1] + "\n");
}
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("Path of sd card external............"+externalpath);
System.out.println("Path of internal memory............"+internalpath);
}
一旦获得路径
File file = new File(internalpath+"/ping.xml");// internalpath or external path
if(file.exists()){
msgText.setText("Found");
}
else{
msgText.setText("Not Found");
}
更新:
不建议使用上述解决方案。可能效果不好。 Environment.getExternalStorageDirectory()
将始终返回外部存储路径。在大多数情况下,它是一张Sdcard。
来自文档
public static File getExternalStorageDirectory()
在API级别1中添加返回主外部存储目录。 如果已安装此目录,则该目录当前可能无法访问 由用户在他们的计算机上,已从设备中删除,或 还发生了一些其他问题。您可以确定其当前状态 使用getExternalStorageState()。
注意:不要在这里混淆“外部”这个词。这个目录 可以更好地被视为媒体/共享存储。它是一个文件系统 可以容纳相对大量的数据,并且可以共享 所有应用程序(不强制执行权限)。传统上这是 SD卡,但它也可以作为内置存储器实现 与受保护的内部存储区别的设备,可以是 作为文件系统安装在计算机上。
答案 2 :(得分:0)
检查一下:
File file = new File(Environment.getExternalStorageDirectory()+"/ping.xml");
if(file.exists()){
msgText.setText("Found");
}
else{
msgText.setText("Not Found");
}