无法使用时间戳保存新文件

时间:2014-01-16 23:50:13

标签: java android eclipse save timestamp

我想将文件保存到SD卡中,我使用时间戳,所以如果已经有一个同名的文件没有被替换 这是我的代码

public void onClick(View v) {
            // TODO Auto-generated method stub

            boolean mExternalStorageAvailable = false;
            boolean mExternalStorageWriteable = false;
            String state = Environment.getExternalStorageState();

            if (Environment.MEDIA_MOUNTED.equals(state)) {

                mExternalStorageAvailable = mExternalStorageWriteable = true;
            } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {

                mExternalStorageAvailable = true;
                mExternalStorageWriteable = false;
            } else {

                mExternalStorageAvailable = mExternalStorageWriteable = false;
            }

            try {

                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'/'HHmm");
                String timestamp = dateFormat.format(new Date());
                String filename = "_" + timestamp + ".txt";

                File myFile = new File(Environment.getExternalStorageDirectory(), "Preposisi Removal/PreposisiRemoval");
                myFile.getParentFile().mkdir();
                myFile.createNewFile();
                FileOutputStream FOut = new FileOutputStream(myFile+filename);
                OutputStreamWriter myOutWriter =
                        new OutputStreamWriter(FOut);
                        myOutWriter.append(tv.getText());
                        myOutWriter.close();
                        FOut.close();
                Toast.makeText(getBaseContext(), "Save Files Successful", Toast.LENGTH_SHORT).show();
            }
            catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    });

    button = (Button) findViewById(R.id.button7);
    button.setOnClickListener (this);

}

但是当我运行它时,我得到toast信息" / mnd / sdcard / Preposisi删除/ PreposisiRemoval_20140117 / 0633.txt:打开失败:ENOENT(没有这样的文件或目录)

我猜是因为没有文件夹" Preposisi删除" 那么如果文件夹不存在,如何自动创建文件夹呢?

或者我的编码有什么问题吗? 每按一次保存按钮我想保存新文件,而不是覆盖以前的文件

1 个答案:

答案 0 :(得分:1)

首先创建目录(如果已经存在,则不会抛出错误):

File directory = new File(Environment.getExternalStorageDirectory(), "Preposisi Removal/");
directory.mkdirs();

然后在该目录中创建文件(使用名称complete with timestamp和suffix):

File myFile = new File(directory, "PreposisiRemoval" + filename); //Changed code
//myFile.getParentFile().mkdir();  //No longer required
myFile.createNewFile();
FileOutputStream FOut = new FileOutputStream(myFile);  //Changed code

编辑:

好的,现在我看到了实际问题:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'/'HHmm");

文件名的时间戳部分中有一个'/'。您不能在文件名中使用该字符,因为它表示文件夹或目录。将其更改为其他角色,例如:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'_'HHmm");

您的代码(或我之前建议的更新)应该有效。