2

Gmailアプリケーションで送信するメールに添付するテキストファイルをSDカードに作成するのに問題があります。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();
}
4

1 に答える 1

0

エラーは次のとおりです。

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

これは

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

私は2つの非常に小さな「エラー」しか見ませんでした:

【スタイル問題】

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

する必要があります

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

それ以外の場合はを使用しているためですFile.toString()

[最小のコード]

削除する必要があります:

csv_file.createNewFile();

2回目の試行

交換してみてください

    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();
            }
        }

     {

これにより、存在テスト、mkdir、および不要な個別のファイルの作成が削除されます。エラー領域を制限してみてください。

さらに、テキストにはデフォルトのプラットフォームエンコーディングを使用しています。あなたはそれを明示的にすることができます:

new FileWriter(csv_file, "UTF-8")
于 2012-06-10T00:48:40.440 に答える