我想用一个按钮在我的外部卡片中列出我的文件夹(目前硬编码位置只是为了让球滚动)
public void onClickBtn(View v) {
File f = new File("/storage");
File[] files = f.listFiles();
for (File inFile : files) {
if (inFile.isDirectory()) {
Log.i("is directory", "here: " + inFile);
}
}
}
这输出到我的logcat:
I/is directory: here: /storage/3164-6330
I/is directory: here: /storage/emulated
I/is directory: here: /storage/Private
I/is directory: here: /storage/enc_emulated
I/is directory: here: /storage/self
现在我想重复相同的过程,但改变我的路径“/ storage / 3164-6330”,因为我知道我的SD卡存储的地方
public void onClickBtn(View v) {
File f = new File("/storage/3164-6330");
File[] files = f.listFiles(); //will cause error here
for (File inFile : files) {
if (inFile.isDirectory()) {
Log.i("is directory", "here: " + inFile);
}
}
}
但我在logcat中得到了这个:
Caused by: java.lang.NullPointerException: Attempt to get length of null array at com.example.abc.MainActivity.onClickBtn(MainActivity.java:141)
就是这一行:
for (File inFile : files) {
有谁知道我为什么要生成一个空数组?我的/ storage / 3164-6330路径中有文件和文件夹。谢谢!
答案 0 :(得分:0)
listFiles() “如果目录为空,则数组将为空。如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。” - link
似乎该文件夹不存在。我认为SD卡位置取决于您使用的API。我的是存储/标签卡
您可能只想调用:Environment.getExternalStorageDirectory()来获取SD卡位置。
编辑:我道歉,我没有看到关于了解那些存在的最后一行。尝试使用Environment.get调用,因为我有类似的问题,并在我的调用中结束了答案 1 :(得分:0)
尝试在文件夹名称的末尾添加File.separator(' /')
<jndiEntry jndiName="ibm.appcenter.services.endpoint" value="*://*:*/applicationcenterdev" />