⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diskmonitor.java

📁 磁盘监控。使用java监控磁盘容量
💻 JAVA
字号:
package diskmonitor;

import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionEvent;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.io.File;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Vector;

/**
 * <p>Title: Disk/partition free space realtime monitor</p>
 * <p>Description: When free space on specifized disk/partition
 *    is bellow certain value, this software will be waked up and delete
 *    the olderest file(or sub-folder) of given folders.</p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: School of Computer, Wuhan University</p>
 * @version 1.0
 * By Zhu fubao.
 * Email: fbzhu@whu.edu.cn
 */

public class DiskMonitor
    extends JFrame {
  JButton jButton2 = new JButton();
  JPanel jPanel1 = new JPanel();
  JScrollPane jScrollPane1 = new JScrollPane();
  public static JTextArea jTextArea1 = new JTextArea();
  JScrollPane jScrollPane2 = new JScrollPane();
  public static JTextArea jTextArea2 = new JTextArea();
  GridLayout gridLayout1 = new GridLayout();
  JPanel jPanel2 = new JPanel();
  JButton jButton1 = new JButton();
  JTextField jTextField1 = new JTextField();
  JTextField jTextField2 = new JTextField();
  public static int TIMEINTERVAL=30;
  public static long FREESPACE=500;

  JLabel jLabel1 = new JLabel();
  JLabel jLabel2 = new JLabel();
  JLabel jLabel3 = new JLabel();
  JLabel jLabel4 = new JLabel();
  JLabel jLabel5 = new JLabel();
  JLabel jLabel6 = new JLabel();
  GridBagLayout gridBagLayout1 = new GridBagLayout();

  public DiskMonitor() {
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  public static void main(String[] args) {
    DiskMonitor diskMonitor = new DiskMonitor();
    diskMonitor.setSize(800, 600);
    diskMonitor.setTitle("Disk free space realtime monitor");
    diskMonitor.show();
  }

  private void jbInit() throws Exception {
    jButton2.setText("Start Monitor....");
    jButton2.addActionListener(new DiskMonitor_jButton2_actionAdapter(this));
    jPanel1.setLayout(gridLayout1);
    jTextArea1.setText("");
    jTextArea2.setText("");
    jButton1.setText("Add folder...         ");
    jButton1.addActionListener(new DiskMonitor_jButton1_actionAdapter(this));
    jTextField1.setText("30");
    jTextField2.setText("500");
    jPanel2.setAlignmentY((float) 0.5);
    jPanel2.setDebugGraphicsOptions(0);
    jPanel2.setLayout(gridBagLayout1);
    jLabel1.setText("   ");
    jLabel2.setText("      ");
    jLabel3.setText("Time Interval ");
    jLabel4.setText("s      ");
    jLabel5.setText("Free Space ");
    jLabel6.setText("MB    ");
    this.getContentPane().add(jButton2, BorderLayout.SOUTH);
    this.getContentPane().add(jPanel1, BorderLayout.CENTER);
    jPanel1.add(jScrollPane1, null);
    jPanel1.add(jScrollPane2, null);
    jScrollPane2.getViewport().add(jTextArea2, null);
    jScrollPane1.getViewport().add(jTextArea1, null);
    this.getContentPane().add(jPanel2, BorderLayout.NORTH);
    jPanel2.add(jLabel1,  new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 24, 5, 0), 0, 0));
    jPanel2.add(jButton1,  new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 0, 5, 0), 0, 0));
    jPanel2.add(jLabel2,  new GridBagConstraints(2, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 0, 5, 0), 0, 0));
    jPanel2.add(jLabel3,  new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 0, 5, 0), 0, 0));
    jPanel2.add(jTextField1,  new GridBagConstraints(4, 0, 1, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 0), 0, 0));
    jPanel2.add(jLabel4,  new GridBagConstraints(5, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 0, 5, 0), 0, 0));
    jPanel2.add(jLabel5,  new GridBagConstraints(6, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 0, 5, 0), 0, 0));
    jPanel2.add(jTextField2,  new GridBagConstraints(7, 0, 1, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 5, 0), 0, 0));
    jPanel2.add(jLabel6,  new GridBagConstraints(8, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 0, 5, 25), 0, 0));
  }

  void jButton1_actionPerformed(ActionEvent e) {
    int result;
    File file1;
    JFileChooser fileChooser1 = new JFileChooser(System.getProperty("user.dir"));
    fileChooser1.setApproveButtonText("确定");
    fileChooser1.setDialogTitle("打开文件");
    result = fileChooser1.showOpenDialog(this);
    if (result == JFileChooser.APPROVE_OPTION) {
      file1 = fileChooser1.getSelectedFile();
      jTextArea1.append(file1.getPath() + "\n");
    }
  }

  void jButton2_actionPerformed(ActionEvent e) {
    int linecount = jTextArea1.getLineCount();
    String s = jTextArea1.getText();
    String driverPaths[] = s.split("\n");
    TIMEINTERVAL=Integer.parseInt(jTextField1.getText().trim());
    FREESPACE=Long.parseLong(jTextField2.getText());
    for (int i = 0; i < driverPaths.length; i++) { //测试每个磁盘的自由空间
      String disk = driverPaths[i];
      File path = new File(disk);
      if (!path.exists()) {
        JOptionPane.showMessageDialog(null, disk + " is not exist!", "hi", 0);
        System.exit(0);
      }
    }
    new MonitorThread(driverPaths);
  }
}

class DiskMonitor_jButton2_actionAdapter
    implements java.awt.event.ActionListener {
  DiskMonitor adaptee;

  DiskMonitor_jButton2_actionAdapter(DiskMonitor adaptee) {
    this.adaptee = adaptee;
  }

  public void actionPerformed(ActionEvent e) {
    adaptee.jButton2_actionPerformed(e);
  }
}

class MonitorThread
    implements Runnable {
  Thread mt = null;
  String driverspaths[];
  MonitorThread(String driverPaths[]) {
    driverspaths = driverPaths;
    mt = new Thread(this);
    mt.start();
  }

  public void run() {
    while (true) {
      DiskMonitor.jTextArea2.setText("-----------------  " + new Date() +
                                     "----------------\n");
      long driversize[] = new long[driverspaths.length];
      for (int i = 0; i < driverspaths.length; i++) { //测试每个磁盘的自由空间
        String disk = driverspaths[i];
        long size = getFreeDiskSpace(disk);
        driversize[i] = size / 1024 / 1024;
        DiskMonitor.jTextArea2.append("free space:  " + disk + "  " +
                                      driversize[i] + " MB\n");
      }
      int deleteFlag = 1;
      for (int i = 0; i < driversize.length; i++) {
        if (driversize[i] > DiskMonitor.FREESPACE) {
          deleteFlag = 0;
        }
      }
      if (deleteFlag == 1) { //如果所有磁盘的空间都小于 500MB,则执行删除操作
        DiskMonitor.jTextArea2.append(
            "@@@@ DiskMonitor will delete file! @@@@@  " +
            new
            SimpleDateFormat("yyyy-MM-dd HH:mm:ss").
            format(Calendar.
                   getInstance().getTime()) + "\n");
        searchDisk(driverspaths); //查找每个磁盘上指定目录下的最老文件
      }
      try {
        mt.sleep(DiskMonitor.TIMEINTERVAL*1000);
      }
      catch (InterruptedException e) {
        System.out.println("Error: " + e.toString());
      }
    }
  }

  public void deleteAll(File path) {
    if (!path.exists()) {
      DiskMonitor.jTextArea2.append(path + "not exists...\n");
      return;
    }
    if (path.isFile()) {
      DiskMonitor.jTextArea2.append("deleting " + path + "...");
      path.delete();
      DiskMonitor.jTextArea2.append(", delete successfully!\n");
      return;
    }
    File[] files = path.listFiles();
    for (int i = 0; i < files.length; i++) {
      deleteAll(files[i]);
    }
    DiskMonitor.jTextArea2.append("deleting  " + path + "...");
    path.delete();
    DiskMonitor.jTextArea2.append(", delete successfully!\n");
  }

  public Vector searchTheOlderFile(String dirverPath) { //搜索最老的
    File path = new File(dirverPath);
    File[] files = path.listFiles();
    int filenum = files.length;
    String x[] = new String[filenum];
    String y[] = new String[filenum];
    DiskMonitor.jTextArea2.append("Total files: " + files.length + " in " +
                                  dirverPath + "\n");
    for (int i = 0; i < filenum; i++) {
      x[i] = files[i].getPath();
      long filedate = files[i].lastModified();
      Date d = new Date(filedate);
      y[i] = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d);
    }
    String oldestfilename = x[0];
    String oldestfiletime = y[0];
    for (int i = 1; i < filenum; i++) {
      if (oldestfiletime.compareTo(y[i]) > 0) {
        oldestfiletime = y[i];
        oldestfilename = x[i];
      }
    }
    Vector v = new Vector(2);
    v.add(oldestfilename);
    v.add(oldestfiletime);
    return v;
  }

  public void searchDisk(String[] driverPaths) {
    String oldestDeleteFileName[] = new String[driverPaths.length];
    String oldestDeleteFileTime[] = new String[driverPaths.length];
    Vector v = null;
    for (int i = 0; i < driverPaths.length; i++) {
      v = searchTheOlderFile(driverPaths[i]);
      oldestDeleteFileName[i] = (String) v.get(0);
      oldestDeleteFileTime[i] = (String) v.get(1);
      DiskMonitor.jTextArea2.append(oldestDeleteFileName[i] + "  " +
                                    oldestDeleteFileTime[i] + "\n");
    }
    String oldestfilename = oldestDeleteFileName[0];
    String oldestfiletime = oldestDeleteFileTime[0];
    for (int i = 1; i < oldestDeleteFileName.length; i++) {
      if (oldestfiletime.compareTo(oldestDeleteFileTime[i]) > 0) {
        oldestfiletime = oldestDeleteFileTime[i];
        oldestfilename = oldestDeleteFileName[i];
      }
    }
    DiskMonitor.jTextArea2.append("========  The oldest file is  ===========\n");
    DiskMonitor.jTextArea2.append(oldestfilename + "-->" + oldestfiletime +
                                  "\n");
    DiskMonitor.jTextArea2.append("=========================================\n");
    File temp_path = new File(oldestfilename);
    deleteAll(temp_path); //执行删除操作
  }

  public long getFreeDiskSpace(String dirName) {
    try {
      String os = System.getProperty("os.name");
      String command;
      if (os.equals("Windows NT") || os.equals("Windows 2000")) {
        command = "cmd.exe  /c dir " + dirName;
      }
      else {
        command = "command.com /c dir " + dirName;
      }

      Runtime runtime = Runtime.getRuntime();
      Process process = null;
      process = runtime.exec(command);
      if (process == null) {
        return -1;
      }
      BufferedReader in = new BufferedReader(new InputStreamReader(process.
          getInputStream()));
      String line;
      String freeSpace = null;
      while ( (line = in.readLine()) != null) {
        freeSpace = line;
      }
      if (freeSpace == null) {
        return -1;
      }
      process.destroy();
      freeSpace = freeSpace.trim();
      freeSpace = freeSpace.replaceAll("\\.", "");
      freeSpace = freeSpace.replaceAll(",", "");
      String[] items = freeSpace.split(" ");
      int index = 1;
      while (index < items.length) {
        try {
          long bytes = Long.parseLong(items[index++]);
          return bytes;
        }
        catch (NumberFormatException nfe) {}
      }
      return -1;
    }
    catch (Exception exception) {
      return -1;
    }
  }
}

class DiskMonitor_jButton1_actionAdapter implements java.awt.event.ActionListener {
  DiskMonitor adaptee;

  DiskMonitor_jButton1_actionAdapter(DiskMonitor adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -