2017-02-17 23 views
0

私はサイトの他のユーザーが既に問題を抱えています。私はそれらのソリューションを試してみて、私のために働かなかった。SDカードに書き込むときにAndroidのcsvファイルが表示されない

私は現在、ユーザーの入力に基づいてcsvファイルを作成するアプリケーションを開発しています。デバイスがUSB経由でPCに接続されている場合、ファイルをユーザーが取得できる必要があります。保存コード機能は正しく機能しますが、デバイスが接続されているときにファイルがPCに表示されません。ファイルが外部ストレージに書き込まれていると私はより多くのスペースが取られることがわかりますが、ファイル自体はまだ表示されていない

FileWriter fileWriter = null; 
    File sdCard = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 
    File dir = new File(sdCard.getAbsolutePath() + "/appFolder/"); 
    File dir2 = new File(sdCard.getAbsolutePath() + "/appFolder/appSubFolder/"); 
    dir.mkdirs(); 
    dir2.mkdirs(); 
    fileName = clientName + " " + agentName + ".csv"; 
    path = sdCard.getAbsolutePath() + "/appFolder/appSubFolder/"; 
    file = new File(dir2, fileName); 

    dir.setReadable(true); 
    dir.setWritable(true); 
    dir.setExecutable(true); 

    dir2.setReadable(true); 
    dir2.setWritable(true); 
    dir2.setExecutable(true); 

    file.setReadable(true); 
    file.setWritable(true); 
    file.setExecutable(true); 

    this.clientName = clientName; 
    this.agentName = agentName; 
    BufferedWriter bufferedWriter = null; 
    try { 
     if(!dir.exists()){ 
      dir.createNewFile(); 
      Toast.makeText(context,"dir created", Toast.LENGTH_SHORT).show(); 
     } 
     if(!dir2.exists()){ 
      dir2.createNewFile(); 
      Toast.makeText(context,"dir2 created", Toast.LENGTH_SHORT).show(); 
     } 
     if (!file.exists()) 
     { 
      file.createNewFile(); 
      Toast.makeText(context,"file created", Toast.LENGTH_SHORT).show(); 
     } 
     /* 
     fileWriter = new FileWriter(file, true); 
     bufferedWriter = new BufferedWriter(fileWriter); 
     bufferedWriter.write(fullOrder); 

     fileWriter.flush(); 
     bufferedWriter.flush(); 
     bufferedWriter.close(); 
     fileWriter.close(); 
     */ 

     FileOutputStream fileOutputStream = new FileOutputStream(file); 
     OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); 
     outputStreamWriter.append(fullOrder); 
     outputStreamWriter.close(); 
     fileOutputStream.close(); 

     MediaScannerConnection.scanFile(context, new String[]{file.toString()}, null, null); 
     context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(dir))); 
     context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(dir2))); 
     context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file))); 
    } catch (IOException ioEx) { 
     Toast.makeText(context, ioEx.toString(), Toast.LENGTH_SHORT).show(); 
     Log.d("mTag", "msg"); 
     Log.d("Exception ioEx 1", ioEx.toString()); 
    } catch (Exception ex) { 
     Toast.makeText(context, ex.toString(), Toast.LENGTH_SHORT).show(); 
     Log.d("mTag", "msg"); 
     Log.d("Genereic ex saveToFile", ex.toString()); 
    } 

これはアプリの完全な省コードスニペットです。

問題が発生した場合は、何か助けていただければ幸いです。ありがとうございました!

答えて

0

MediaScannerにブロードキャストを送信する方法ですが、効率的に動作しない可能性があります。推奨されません。

推奨される方法は、作成されたファイル/ [文字列の型のArrayListに]このように、更新

ArrayList<String> filesToBeScanned = new ArrayList<String>(); 
filesToBeScanned.add(item.getFilePath()); 

は今、あなたはscanFileを実行する必要があります()の静的メソッドのファイルパスを追加することですMediaScannerConnectionクラスおよびは、のすべてのファイルのリストを含む文字列配列が作成/更新され、メディアスキャンする必要があります。

個々のファイルのスキャンが完了したときに応答するリスナーを配置することもできます。

String [] toBeScannedStr = new String [toBeScanned.size()]; toBeScannedStr = fileToBeScanned.toArray(toBeScannedStr);

  MediaScannerConnection.scanFile(getActivity(), toBeScannedStr, null, new OnScanCompletedListener() { 

       @Override 
       public void onScanCompleted(String path, Uri uri) { 
        System.out.println("SCAN COMPLETED: " + path); 

       } 
      }); 

これがあなたの問題を解決することを望みます。

+0

こんにちは、私はあなたのソリューションを試して、それは正常に動作していないようでした。私が追加したトーストは決して表示されませんでした。 チェックする前に十分に待っていない可能性があるため、スキャンにどのくらい時間がかかりますか。 ありがとうございました! –

+0

あなたはコンソール上のパスでスキャン完了テキストを見ることができましたか?それには時間がかかることがあります。 – MobileEvangelist

+0

私はまだできませんでしたが、実際には内部のDCIMディレクトリに保存していたことに気付きましたが、あなたの助けがなくても目に見えません。ご協力ありがとうございました! –

関連する問題