在Android中使用listFiles()方法获取目录中的文件时,有时可能会返回null尽管目录中存在文件。这可能是由于以下几个原因引起的:
下面是一个示例代码,演示如何解决该问题:
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.File;
public class MainActivity extends AppCompatActivity {
private static final int PERMISSION_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 检查存储权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// 请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
PERMISSION_REQUEST_CODE);
} else {
// 权限已经被授予,执行操作
readFiles();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被授予,执行操作
readFiles();
} else {
// 权限被拒绝,显示错误消息或执行其他操作
Log.e("MainActivity", "读取存储权限被拒绝");
}
}
}
private void readFiles() {
// 检查外部存储是否可用
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// 获取目录路径
File directory = new File(Environment.getExternalStorageDirectory().getPath() + "/myDirectory");
// 检查目录是否存在
if (directory.exists()) {
// 获取目录中的文件
File[] files = directory.listFiles();
if (files != null) {
// 遍历文件并进行操作
for (File file : files) {
Log.d("MainActivity", "文件名:" + file.getName());
}
} else {
Log.e("MainActivity", "目录中没有文件");
}
} else {
Log.e("MainActivity", "目录不存在");
}
} else {
Log.e("MainActivity", "外部存储不可用");
}
}
}
请注意,示例代码中的readFiles()方法执行了以下操作:
检查存储权限:使用ContextCompat.checkSelfPermission()方法检查应用程序是否具有读取存储权限。如果权限未被授予,则使用ActivityCompat.requestPermissions()方法请求权限。
检查外部存储是否可用:使用Environment.getExternalStorageState()方法检查外部存储是否可用。
获取目录中的文件:使用File类的listFiles()方法获取目录中的文件。在此之前,我们使用File类的exists()方法确保目录存在。
请根据您的实际需求进行调整和修改。