2016-03-30 10 views
0

特定の拡張子を持つすべてのファイルの名前を変更しようとしています。これは問題なく動作しますが、プロセスが遅くなり、しばらくの間デバイスがフリーズすることがあります。どのように私はそれがより少ないメモリを取るようにするのですか?その下に、このリンクにファイルの名前を変更するとメモリが大量に失われる

setContentView(R.layout.transparent_ui); 
    // getting SDcard root path 
    File dir = new File(Environment.getExternalStorageDirectory() 
      .getAbsolutePath()); 
    walkdir(dir); 
    finish(); 
} 

public static final String[] TARGET_EXTENSIONS = { "the_video_first", 
     "webm", "mkv", "flv", "vob", "ogg", "drc", "gif", "gifv", "mng", 
     "avi", "mov", "wmv", "yuv", "rm", "rmvb", "asf", "mp4", "mpg", 
     "mpeg", "mpg", "mpeg", "m4v", "svi", "3gp", "3g2", "mxf", 
     "now_the_audio", "wav", "mp3", "wma", "ogg", "m4a", 
     "now_the_images", "jpg", "jpeg", "png", "bmp" }; 

public void walkdir(File dir) { 
    File listFile[] = dir.listFiles(); 
    if (listFile != null) { 
     for (int i = 0; i < listFile.length; i++) { 
      if (listFile[i].isDirectory()) { 
       walkdir(listFile[i]); 
      } else { 
       String fPath = listFile[i].getPath(); 

       for (String ext : TARGET_EXTENSIONS) { 
        fPath = fPath.replace("." + ext, ".xghost" + ext); 
       } 

       listFile[i].renameTo(new File(fPath)); 
      } 
     } 
    } 
} 
+0

このライブラリを試しましたか?コンパイル 'commons-io:commons-io:2.4'。それはいくつかの良いファイル操作を持っています。 –

答えて

0

ルックは、あなたがする何をしようとしている異なる実装

http://www.baeldung.com/java-how-to-rename-or-move-a-file

+0

あなたの答えはまったく無関係です。私はこれが冗談だったと思う。 – collie

+0

Commons IO、Guavaにファイル操作があります。それらはJavaデフォルトへの代替です。 "renameTo"メソッドをそれらのライブラリの適切なメソッドに置き換えます。次に、パフォーマンスを確認します。 –

+0

asynstackの回答を掲示してください – collie

0

を持っている?、あなたのロジックを詳しく説明することができます。なぜこの内部のFORループが何度も実行されています。どのようにあなたの最終的な道をする必要がありますか?

for (String ext : TARGET_EXTENSIONS) { 
    fPath = fPath.replace("." + ext, ".xghost" + ext); 
} 
+0

質問が言うように。 「特定の拡張子を持つすべてのファイルの名前を変更しようとしています。これは正常に動作します。投稿する前に質問をお読みください。ありがとう。 – collie

+0

"ファイル名を置き換える"というあなたの質問を理解しました。また、他の部分に配置されているコードの一部を理解しようとしています。何が行われているのか - ファイルパスに対してループはTARGET_EXTENSIONS配列サイズで実行されています。 しかし、ループコードを見れば、ファイルパスは常に.xghostbmpに拡張子.bmpで終わってしまいます これはあなたのパフォーマンスですか? – chethan

0

このコードを試してください。

public void walkdir(File dir) { 
    File listFile[] = dir.listFiles(); 
    if (listFile != null) { 
     for (int i = 0; i < listFile.length; i++) { 
      if (listFile[i].isDirectory()) { 
       walkdir(listFile[i]); 
      } else { 
       String fPath = listFile[i].getPath(); 

       for (String ext : TARGET_EXTENSIONS) { 
        // use string builder avoid concatenation inside a loop 
        String oldExt = new StringBuilder().append(".").append(ext).toString(); 
        if (fPath.contains(oldExt)) { 
         String newExt = new StringBuilder().append(".xghost").append(ext).toString(); 
         fPath = fPath.replace(oldExt, newExt); 
         listFile[i].renameTo(new File(fPath)); 
         break; // no need to continue once we have replaced the extension. 
        } 
       } 

      } 
     } 
    } 
} 
関連する問題