我测试了这段代码,它在 java 中运行良好,并在我的笔记本电脑上编写了一个测试文件,但是无法让它在 android 设备上运行。
我写了一个注释来显示空指针异常在哪里。
当我在几个不同的 android 设备上运行它时,结果是一样的。它在同一行代码中以空指针崩溃。
什么会导致它在 java 桌面应用程序上正常工作并在 android 设备上获得空指针?
有任何想法吗?
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
File makeDirectory = new File("/mnt/testDirectory/");
// File makeDirectory = new File("C:/testDirectory/"); // when used on
// java desktop app
makeDirectory.mkdir();
File file = new File("/mnt/testDirectory/testfile.txt");
// File file = new File("C:/testDirectory/testfile.txt"); // when used
// on java desktop app
try {
file.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
PrintStream output = null;
try {
output = new PrintStream(new FileOutputStream(file));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
output.print(true); // <----- NULL POINTER EXCEPTION THIS LINE
output.print((int) 123);
output.print((float) 123.456);
output.printf(Locale.UK, "Text + data: %1$", 123);
output.close();
}
}
清单 xml 文件中的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
编辑:我刚刚发现了一些额外的信息,所以我不害怕使用 getExternalStorageDirectory() 因为如果我是正确的。所有 Android 设备上都有一些外部存储目录,即使不使用 SD 卡,例如我发现的另一个问题,
"Android will always report one mounted hardware memory (if any available) as External Storage.
That memory can be:
fitted inside the device by manufacturer (internal memory)
can be an sd card (external memory)
从这个问题: