2016-05-12 62 views
0

我的代码用于重命名SD卡上的文件夹中的文件,但是,它不会重命名同一文件夹中存在的子文件夹中的文件。如何在android中获取子目录?

这里是我的方法,我加入这行 -

ExplorerDBOperation(listFile[i]); 

,但我得到的错误是 - “的方法ExplorerDBOperation(文件)是未定义的类型Hide.ExplorerDBOperation”我怎么叫我的方法再次?这是在的AsyncTask

@Override 
    protected Boolean doInBackground(Void... params) { 
     File listFile[] = myDirectory.listFiles(); 
     if (listFile != null) { 
      for (int i = 0; i < listFile.length; i++) { 
       if (listFile[i].isDirectory()) { 
        ExplorerDBOperation(listFile[i]); 
       } else { 
        String fPath = listFile[i].getPath(); 

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

        listFile[i].renameTo(new File(fPath)); 
       } 
      } 
     } 
     return true; 
    } 

全码

// getting SDcard root path 
File myDirectory = new File(Environment.getExternalStorageDirectory() 
     + "/SecuDrive/"); 
public static final String[] TARGET_EXTENSIONS = { "exe", "apk", "tar", "img", "iso" }; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_hide); 
    // at the end of oncreate 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      new ExplorerDBOperation().execute(); 
     } 
    }, 300); 
} 

class ExplorerDBOperation extends AsyncTask<Void, Boolean, Boolean> { 
    ProgressDialog dialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog = ProgressDialog.show(Hide.this, "Please wait", 
       "Processing.."); 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     File listFile[] = myDirectory.listFiles(); 
     if (listFile != null) { 
      for (int i = 0; i < listFile.length; i++) { 
       if (listFile[i].isDirectory()) { 
        ExplorerDBOperation(listFile[i]); 
       } else { 
        String fPath = listFile[i].getPath(); 

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

        listFile[i].renameTo(new File(fPath)); 
       } 
      } 
     } 
     return true; 
    } 

回答

0
@Override 
    protected Boolean doInBackground(Void... params) { 
    renameInDir(myDirectory); 
    return true; 
    } 

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

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

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

renameInDir(listfile中[1]);只是这条线? – abbie

+0

@abbie aha,请注意,您需要在异步任务中添加此方法 –

相关问题