从内部存储中删除多个选中的文件

delete multiple checked files from internal storage

TL;DR

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


完整说明

我可以使用deleteFile("fileName")方法删除一个文件

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

所有名字都在ArrayList

中列出

Java 代码到 check/uncheck,同时将文件名添加到 ArrayList

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

        }
    });
}

注意这段代码只删除一个文件

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

Sample code

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++;
                }
            }
}

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

我希望它能给您一个想法,让您根据自己的情况修改代码。 :)

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

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