文件从SD卡中消失

时间:2012-06-10 00:36:55

标签: android android-sdcard fileinfo

我在SD卡上创建一个文本文件时遇到问题,要附加到要通过gmail应用程序发送的电子邮件中。 当附加到Gmail应用程序中的电子邮件时,电子邮件将永远停留在红色的“发送...”状态。该文件是使用下面的createCSVfile()创建的。

调试我的代码,不同时间启动我的应用程序,csv_file.exists()始终返回false,就好像找不到文件一样,并且每次运行应用程序时都要创建该文件。 但是,使用文件管理器,我可以在运行期间和运行期间看到文件。

请帮忙吗? 感谢

File csv_file = null;
String createCSVfile() {
    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
        csv_file = new File( getExternalFilesDir(null) + File.separator + "InOutStats.txt");
        if (csv_file != null ) {
            if( csv_file.exists() ){
                Log.v("CSV_FILE", "Stat file " + csv_file.toString() +" already there!");
            }else{
                csv_file.getParentFile().mkdirs();
                try {
                    boolean bool = csv_file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            FileWriter fWriter = null;
            try {
                fWriter = new FileWriter(csv_file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            BufferedWriter writer = new BufferedWriter(fWriter);
            try {
                writer.write("Some text here!!! " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
                writer.newLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                writer.flush();
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }else{
        Log.v("CSV_FILE", "NO SD CARD HERE???");
    }
    return csv_file.toString();
}

1 个答案:

答案 0 :(得分:0)

错误是:

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis())

应该是

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())

我只看到两个非常小的“错误”:

[样式问题]

csv_file = new File( getExternalFilesDir(null) + File.separator + "InOutStats.txt");

应该是

csv_file = new File( getExternalFilesDir(null), "InOutStats.txt");

因为否则您使用的是File.toString()

[最小代码]

删除应该是:

csv_file.createNewFile();

第二次尝试

尝试替换

    if (csv_file != null ) {
        if( csv_file.exists() ){
            Log.v("CSV_FILE", "Stat file " + csv_file.toString() +" already there!");
        }else{
            csv_file.getParentFile().mkdirs();
            try {
                boolean bool = csv_file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

     {

这将删除存在测试,mkdirs和不需要的单独文件创建。 完成尝试限制错误区域。

此外,您正在使用文本的默认平台编码;你可以说清楚:

new FileWriter(csv_file, "UTF-8")