我测试了这段代码,它在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();
}
}
权限
<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)
从这个问题:
答案 0 :(得分:1)
这是如何从外部存储中获取文件的:
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename);
注意:
可能是您的设备已植根。 mnt可以工作。我不知道。但, 这是一种错误的做法。
答案 1 :(得分:1)
Environment.getExternalStorageDirectory()方法,它返回一个File对象,该对象包含对根存储目录的引用。从那以后;如果你是一个优秀的java程序员,我认为你可以处理其余的事情;)