如何通过在输出应用程序中指定目录来从目录中删除文件 [英] How to Delete files from the directory by specifying it in the output application

查看:59
本文介绍了如何通过在输出应用程序中指定目录来从目录中删除文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

package com.tools;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JRadioButton; 
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer; 
import javax.swing.DefaultListModel;
import javax.swing.JList;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Vector;
import java.awt.event.ActionEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.AbstractListModel;
import java.awt.Color;
import javax.swing.JTextArea;
import java.awt.List;
import javax.swing.JScrollPane;

public class CleaningToolV2 {

private JFrame frame;

private JTextField folderName;
private JTextField date_from;
private JTextField date_to;
JRadioButton radio_max = new JRadioButton("max");
JRadioButton radio_png = new JRadioButton("png");
JRadioButton radio_psd = new JRadioButton("psd");
JRadioButton radio_tiff = new JRadioButton("tiff");
JComboBox<String> comboBox = new JComboBox<String>();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");


JTextArea textArea = new JTextArea();
ArrayList<File> selectedFiles = new ArrayList<File>();

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                CleaningToolV2 window = new CleaningToolV2();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public CleaningToolV2() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    CleaningToolV2 thisObj = this;

    frame = new JFrame();
    frame.setBounds(100, 100, 450, 539);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
    String toDayDate = simpleDateFormat.format(new Date());

    DefaultComboBoxModel<String> comboModel1 = new DefaultComboBoxModel<String>(new String[] {"Furn", "Unfurn"});
    DefaultComboBoxModel<String> comboModel2 = new DefaultComboBoxModel<String>(new String[] {"Temp"});
    comboBox.setModel(comboModel1);
    comboBox.setBounds(20, 174, 145, 27);
    frame.getContentPane().add(comboBox);


    folderName = new JTextField();
    folderName.setBounds(20, 53, 283, 26);
    frame.getContentPane().add(folderName);
    folderName.setColumns(10);

    JButton btnBrowse = new JButton("Browse");
    btnBrowse.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            JFileChooser fc=new JFileChooser(folderName.getText());
            fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            int i=fc.showOpenDialog(frame);    
            if(i==JFileChooser.APPROVE_OPTION){    
                File f=fc.getSelectedFile();    
                String filepath=f.getPath();    
                folderName.setText(filepath);
            }    
        }
    });
    btnBrowse.setBounds(315, 53, 117, 29);
    frame.getContentPane().add(btnBrowse);

    JLabel label_ext = new JLabel("Extensions and File name token");
    label_ext.setBounds(20, 111, 250, 16);
    frame.getContentPane().add(label_ext);

    radio_png.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            comboBox.setModel(comboModel1);
        }
    });
    radio_png.setBounds(20, 139, 78, 23);
    frame.getContentPane().add(radio_png);

    radio_max.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            comboBox.setModel(comboModel2);
        }
    });
    radio_max.setBounds(130, 139, 71, 23);
    frame.getContentPane().add(radio_max);

    JLabel label_folder = new JLabel("Select folder");
    label_folder.setBounds(20, 25, 107, 16);
    frame.getContentPane().add(label_folder);

    JLabel lblSelectTimeFrame = new JLabel("Enter time frame (DD/MM/YYYY)");
    lblSelectTimeFrame.setBounds(20, 235, 267, 16);
    frame.getContentPane().add(lblSelectTimeFrame);

    date_from = new JTextField();
    date_from.setBounds(71, 263, 130, 26);
    frame.getContentPane().add(date_from);
    date_from.setColumns(10);
    date_from.setText(toDayDate);

    date_to = new JTextField();
    date_to.setColumns(10);
    date_to.setBounds(286, 263, 130, 26);
    date_to.setText(toDayDate);
    frame.getContentPane().add(date_to);

    JLabel label_time_from = new JLabel("From :");
    label_time_from.setBounds(20, 268, 57, 16);
    frame.getContentPane().add(label_time_from);

    JLabel label_time_to = new JLabel("To :");
    label_time_to.setBounds(243, 268, 44, 16);
    frame.getContentPane().add(label_time_to);

    JButton btnClearAllFiles = new JButton("Clear All Files");
    btnClearAllFiles.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            for(File f:selectedFiles) {
                f.delete();
            }
            thisObj.refreshList();
        }
    });
    btnClearAllFiles.setBounds(184, 482, 117, 29);
    frame.getContentPane().add(btnClearAllFiles);

    radio_psd.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            comboBox.setModel(comboModel1);
        }
    });
    radio_psd.setBounds(232, 139, 71, 23);
    frame.getContentPane().add(radio_psd);

    radio_tiff.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            comboBox.setModel(comboModel1);
        }
    });
    radio_tiff.setBounds(333, 139, 71, 23);
    frame.getContentPane().add(radio_tiff);

    ButtonGroup bgroup = new ButtonGroup();
    bgroup.add(radio_png);
    bgroup.add(radio_max);
    bgroup.add(radio_psd);
    bgroup.add(radio_tiff);
    radio_png.setSelected(true);

    JLabel label_selected_files = new JLabel("Selected Files");
    label_selected_files.setBounds(20, 318, 127, 16);
    frame.getContentPane().add(label_selected_files);


    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(20, 346, 396, 124);
    frame.getContentPane().add(scrollPane);

    textArea.setEditable(false);
    scrollPane.setViewportView(textArea);

    JButton btnFilterFiles = new JButton("Filter Files");
    btnFilterFiles.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            thisObj.refreshList();
        }
    });
    btnFilterFiles.setBounds(130, 313, 117, 29);
    frame.getContentPane().add(btnFilterFiles);
}

public void refreshList() {
    File folder = new File(folderName.getText());
    File[] listOfFiles = folder.listFiles();
    selectedFiles = new ArrayList<File>();
    String fileNames = "";  
    String selectedItem = comboBox.getSelectedItem().toString().toLowerCase();
    for (int i = 0; i < listOfFiles.length; i++) {
      Date modified = new Date(listOfFiles[i].lastModified());
      String modiDateString = simpleDateFormat.format(modified);
      String from_text = date_from.getText();
      String to_text = date_to.getText();
      if (listOfFiles[i].isFile() && modiDateString.compareTo(from_text) >= 0 && modiDateString.compareTo(to_text) <= 0) {
          String fileName = listOfFiles[i].getAbsoluteFile().getAbsolutePath();
          String ext = this.getSelectedFileExt();
          if(fileName.toLowerCase().endsWith("."+ext) && fileName.toLowerCase().indexOf("_"+selectedItem) > -1) {
              fileNames += listOfFiles[i].getAbsoluteFile().getAbsolutePath() + "\n";
              selectedFiles.add(listOfFiles[i]);
          }
      } 
    }
    textArea.setText(fileNames);
}

private String getSelectedFileExt() {
    String ext;
    if(radio_max.isSelected()) {
        ext = "max";
    } else if(radio_psd.isSelected()) {
        ext = "psd";
    } else if(radio_tiff.isSelected()) {
        ext = "tiff";
    } else {
        ext = "png";
    }
    return ext;
}

}

如果我提供确切的文件夹位置,则在这里删除文件.但是我想得到的是它必须搜索包含子文件夹的目录它必须沿着子文件夹搜索并删除指定的文件(例如,文件名将为下拉菜单中指定的borrry_furn)

here it was deleting the files if i give exact folder location. but what i am trying to get it is it has to search the directory which conrtains subfolders also it has to search along the sub folders and delete the specified files (eg- file name will be borrry_furn) which was specified in the dropdown

plz提前帮助我,谢谢.

plz help me thanks in advance.

推荐答案

它必须搜索包含子文件夹的目录,还必须沿着子文件夹搜索

it has to search the directory which conrtains subfolders also it has to search along the sub folders

您搜索目录的方法需要递归.

Your method to search a directory needs to be recursive.

这是一个递归方法的示例,该方法列出了所有子目录中的文件:

Here is an example of a recursive method that lists the files in all the sub directories:

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class TableFile extends JFrame
    implements ActionListener, Runnable
{
    JTable table;
    DefaultTableModel model;
    JTextField path;
    JLabel currentFile;
    JButton getFiles;
    int totalFiles;
    int totalDirectories;

    public TableFile()
    {
        path = new JTextField("C:\\java");
        add(path, BorderLayout.PAGE_START );

        getFiles = new JButton( "Get Files" );
        getFiles.addActionListener( this );
        add(getFiles, BorderLayout.LINE_START );

        String[] columnNames = {"IsFile", "Name"};

        model = new DefaultTableModel(columnNames, 0);
        table = new JTable( model );

        JScrollPane scrollPane = new JScrollPane( table );
        add(scrollPane, BorderLayout.PAGE_END);

        currentFile = new JLabel(" ");
//      add(currentFile, BorderLayout.PAGE_END); // displays filename in label
    }

    public void actionPerformed(ActionEvent e)
    {
        model.setNumRows(0);

        new Thread( this ).start();

        table.requestFocusInWindow();
    }

    public void run()
    {
        totalFiles = 0;
        totalDirectories = 0;
        listFiles( new File( path.getText() ) );
        System.out.println("Directories: " + totalDirectories);
        System.out.println("Files      : " + totalFiles);
    }

    private void listFiles(File dir)
    {
        updateTable( dir );
        totalDirectories++;
        System.out.println("Processing directory: " + dir);

        //  add a delay to demonstrate processing one directory at a time

        try { Thread.sleep(500); }
        catch(Exception e) {}

        File[ ] entries = dir.listFiles( );
        int size = entries == null ? 0 : entries.length;

        for(int j = 0; j < size; j++)
        {
            if (entries[j].isDirectory( ))
            {
                listFiles( entries[j] );
            }
            else
            {
                updateTable( entries[j] );
                currentFile.setText( entries[j].toString() );
                totalFiles++;
            }
        }
    }

    private void updateTable(final File file)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                Vector<Object> row = new Vector<Object>(2);
                row.addElement( new Boolean( file.isFile() ) );
                row.addElement( file.toString() );
                model.addRow( row );
                int rowCount = table.getRowCount() - 1;
                table.changeSelection(rowCount, rowCount, false, false);
            }
        });
    }

    public static void main(String[] args)
    {
        TableFile frame = new TableFile();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}

这篇关于如何通过在输出应用程序中指定目录来从目录中删除文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆