从内部存储中删除多个已检查的文件

时间:2016-08-25 06:42:39

标签: java android file delete-file

TL; DR

如何删除多个文件,文件名来自util.myPos

完整解释

我可以使用deleteFile("fileName")方法

删除一个文件

但是如何一次删除多个文件?

所有名称都列在ArrayList

在将文件名添加到ArrayList

时检查/取消选中的Java代码
OnItemClickListener getFileEditContent = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String clickedFile = (String)parent.getItemAtPosition(position);
        setMultiEdit(clickedFile);

        // change the checkbox state
        CheckedTextView checkedTextView = ((CheckedTextView) view);
        if (checkedTextView.isChecked()) {
            ((CheckedTextView)view).setChecked(true);
            checkedTextView.setChecked(!checkedTextView.isChecked());

            utils.myPos.remove(stringEditData);

            count--;
            if(count <= 1){
                multiEdit.setEnabled(true);
            }

        } else{
            checkedTextView.setChecked(!checkedTextView.isChecked());
            utils.myPos.add(stringEditData);

            count++;
            if(count >= 2){
                multiEdit.setEnabled(false);
            }

        }
    }
};

删除文件的代码

void setMultiDelete() {
    multiDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (utils.myPosTitle == null || utils.myPosTitle.isEmpty()) {
                Toast.makeText(addressActivity.this, "Select address", Toast.LENGTH_SHORT).show();
            } else {
                String content = utils.myPosTitle.toString();
                String cutContent = content.substring(content.indexOf('[') + 1, content.lastIndexOf(']'));
                deleteFile(cutContent);

                Toast.makeText(addressActivity.this, "Deleted", Toast.LENGTH_SHORT).show();
                showDirFile(dataDr);
                utils.myPos.clear();
                count = 0;
                ArrayAdapter<String> adapter
                        = new ArrayAdapter<String>(addressActivity.this,
                        android.R.layout.simple_list_item_multiple_choice,
                        SavedFiles);
                listView.setAdapter(adapter);
            }

        }
    });
}

注意此代码仅删除一个文件

2 个答案:

答案 0 :(得分:1)

之前我遇到过同样的问题,java中没有可以同时删除多个文件的方法或实用程序,我找到的唯一方法是在循环中逐个删除它们。 因为你的代码的某些部分对我来说不清楚(setMultiEditutils.myPosTitle)我不能给你一个有用的代码解决方案。但stackoverflow中有许多线程可以帮助您修改代码。

  

示例代码

private void cleaner(File directory) {

            if (directory == null)
                return;
            File[] tempDirectory = directory.listFiles();
            if (tempDirectory == null)
                return;
            for (File file : tempDirectory) {
                if (file.isFile()) {
                    if (file.delete())
                        deleteFileCount++;
                } else { // if it's directory
                    cleaner(file);
                    if (file.listFiles() != null)
                        if (file.listFiles().length == 0) // if the directory is empty (after deleting inner files)
                            if (file.delete())
                                deleteFolderCount++;
                }
            }
}

这是我的函数,我用它来删除方法参数中给定目录中的所有文件和目录。

我希望它能让您根据自己的情况修改代码。 :)

答案 1 :(得分:0)

我找到了另一种方法,这种方法会逐个删除ArrayList中的每个名字

void getDeleteFile(){
    for (int i = 0;i < utils.myPosTitle.size();i++){
        String thisFile = utils.myPosTitle.get(i).toString();
        deleteFile(thisFile);
    }
}