2012-06-10 2 views
2

У меня возникла проблема с созданием текстового файла на SD-карте для прикрепления к электронному письму, которое будет отправлено с приложением gmail. Когда вы прикрепляетесь к письму в приложении gmail, электронная почта находится в красном состоянии «Отправка ...» навсегда. Файл создается с помощью createCSVfile() ниже.файл, исчезающий с SD-карты

Отладка моего кода, запуск моего приложения в разные времена, 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(); 
} 

ответ

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") 
+0

Hi. Я применил эти два изменения, как вы предлагаете, но все одинаково. Фактически, та же проблема возникла, когда я только печатал статическую String в файл, и новому файлу() может быть задан весь путь. – DrWolf

+0

Привет снова. Очень странно. Я тестировал один и тот же код на двух других телефонах, и электронное письмо было отправлено правильно. Не уверен что происходит. Спасибо – DrWolf

+0

Возможно, физическая файловая система была буферизована, а не напрямую записана на диск/SD-карту. Хорошая идея тестирования на других телефонах. –

Смежные вопросы