java.io.FileNotFoundException:op
2022-03-04 本文已影响0人
怪咖小青年_56e8
1.添加权限
//清单文件中添加
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//Activity中调用获取权限方法
private void checkNeedPermissions(){
//6.0以上需要动态申请权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//多个权限一起申请
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
}, 1);
}
}
2.查看文件路径是否正确
//我的文件放在手机storage/sdcard0/110_001.txt
File file = new File("/storage/emulated/0/110_001.txt");
if(!file.exists()) {
Log.e("MainActivity.this","File doesn't exist!");
return;
}
try {
FileInputStream is = new FileInputStream(file);
byte[] b = new byte[is.available()];
is.read(b);
String result = new String(b);
System.out.println("读取成功:"+result);
} catch (Exception e) {
e.printStackTrace();
}
3.判断sd卡是否存在及路径
/**
* 获取默认的文件路径
*
* @return
*/
public static String getDefaultFilePath() {
String filepath = "";
File file = new File("/storage/emulated/0/110_001.txt");
if (file.exists()) {
filepath = file.getAbsolutePath();
} else {
filepath = "不适用";
}
return filepath;
}
/**
* 获取SD卡根目录路径
*
* @return
*/
public static String getSdCardPath() {
boolean exist = isSdCardExist();
String sdpath = "";
if (exist) {
sdpath = Environment.getExternalStorageDirectory()
.getAbsolutePath();
} else {
sdpath = "不适用";
}
return sdpath;
}
/**
* 判断SDCard是否存在 [当没有外挂SD卡时,内置ROM也被识别为存在sd卡]
*
* @return
*/
public static boolean isSdCardExist() {
return Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
}
4.全部代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkNeedPermissions();
isSdCardExist();
getSdCardPath();
String defaultFilePath = getDefaultFilePath();
System.out.println(defaultFilePath+"1");
File file = new File("/storage/emulated/0/110_001.txt");
// File file =new File("/storage/emulated/0/110_001.txt");
if(!file.exists()) {
Log.e("MainActivity.this","File doesn't exist!");
return;
}
try {
FileInputStream is = new FileInputStream(file);
System.out.println("192.168.31.110.001.txt");
byte[] b = new byte[is.available()];
is.read(b);
String result = new String(b);
System.out.println("读取成功:"+result);
} catch (Exception e) {
e.printStackTrace();
}
}
private void checkNeedPermissions(){
//6.0以上需要动态申请权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//多个权限一起申请
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
}, 1);
}
}
/**
* 获取默认的文件路径
*
* @return
*/
public static String getDefaultFilePath() {
String filepath = "";
File file = new File("/storage/emulated/0/110_001.txt");
if (file.exists()) {
filepath = file.getAbsolutePath();
} else {
filepath = "不适用";
}
return filepath;
}
/**
* 获取SD卡根目录路径
*
* @return
*/
public static String getSdCardPath() {
boolean exist = isSdCardExist();
String sdpath = "";
if (exist) {
sdpath = Environment.getExternalStorageDirectory()
.getAbsolutePath();
} else {
sdpath = "不适用";
}
return sdpath;
}
/**
* 判断SDCard是否存在 [当没有外挂SD卡时,内置ROM也被识别为存在sd卡]
*
* @return
*/
public static boolean isSdCardExist() {
return Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
}
}