Java Android使用InputStream和File

时间:2013-11-24 15:38:26

标签: java android file inputstream

嗯,首先,我只是在学习,并不太明白我在做什么。 我想要的是在内存中创建一个Excel文件然后可以用ActionBarSherlock的ShareActionProvider发送它到例如邮件。

但我得到了例外:

11-24 18:45:52.112: W/System.err(22073): java.io.FileNotFoundException: /Competition.xls: open failed: EROFS (Read-only file system)

当我在网上搜索答案时 - 这是在只读系统区域中创建文件的问题。但我想在内存中创建它..不知何故。再一次,我不太清楚它是如何工作的 - 我看到它的方式 - 我在内存中的某处创建.xls文件。所以解释会有所帮助。

所以,这是代码:

private void createFileTosend() {
    InputStream inputStream = null;
    FileOutputStream outputStream = null;
    try {
        File toSend=null;
        try {
            toSend = getFile();
        } catch (WriteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    inputStream = new BufferedInputStream(new FileInputStream(toSend));


        outputStream = openFileOutput("Competition.xls",
                Context.MODE_WORLD_READABLE | Context.MODE_APPEND);
        byte[] buffer = new byte[1024];
        int length = 0;
        try {
            while ((length = inputStream.read(buffer)) > 0){
                outputStream.write(buffer, 0, length);
            }
        } catch (IOException ioe) {
            /* ignore */
        }
    } catch (FileNotFoundException fnfe) {
        /* ignore */
    } finally {
        try {
            inputStream.close();
        } catch (IOException ioe) {
           /* ignore */
        }
        try {
            outputStream.close();
        } catch (IOException ioe) {
           /* ignore */
        }
    }
}
public File getFile()  throws IOException, WriteException{
    File file=new File("Competition.xls");

    WritableWorkbook  workbook = Workbook.createWorkbook(file); 
    //then goes creation of Excel 's xls file which is not important for the question
    workbook.write();
    workbook.close(); 

    return file;
}

再一次,请不要贬低我,拜托,我只是在学习

2 个答案:

答案 0 :(得分:0)

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

根据您发布的错误日志,我猜您没有仔细阅读。 IT正在说只读文件系统。您需要在Android清单中添加上述权限 ATLEAST

做这么多,看看是否还有错误

答案 1 :(得分:0)

我怀疑可能是错的

outputStream = openFileOutput("Competition.xls",
            Context.MODE_WORLD_READABLE | Context.MODE_APPEND);

您正在使用Context.MODE_WORLD_READABLE它的可读性,因此如何在以后以写入模式访问它。这样对吗? 请检查此link

使用http://developer.android.com/guide/topics/data/data-storage.html清除您对文件创建的疑虑