简单的写文件代码适用于java但不适用于Android设备

时间:2013-10-02 08:27:17

标签: java android file-io

我测试了这段代码,它在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)

从这个问题:

Device claims external storage, yet I have no SD card

2 个答案:

答案 0 :(得分:1)

这是如何从外部存储中获取文件的:

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename);

注意:

  

可能是您的设备已植根。 mnt可以工作。我不知道。但,   这是一种错误的做法。

答案 1 :(得分:1)

嗯,'/ mnt'? 根据我遇到的所有教程以及android开发者网站; 你需要使用:

Environment.getExternalStorageDirectory()方法,它返回一个File对象,该对象包含对根存储目录的引用。从那以后;如果你是一个优秀的java程序员,我认为你可以处理其余的事情;)