📄 diskmonitor.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 + -