這是我自己達成的解決方案。上面的代碼創建簡單的用戶界面。按鈕正在計算給定路徑的大小,並正在打印給定文件夾的大小以及給定路徑中的文件和文件夾的數量。
- FolderSizeCounter.java
公共類FileSizeCounter {
public static long getFileSize(File folder){
long foldersize = 0;
File[] filelist = folder.listFiles();
if(filelist!=null){
for (int i=0; i < filelist.length; i++) {
if(!filelist[i].isDirectory() && !filelist[i].isFile()){
UI.nonfilecount++;
}
if (filelist[i].isDirectory()) {
foldersize += getFileSize(filelist[i]);
UI.foldercount++;
} else {
foldersize += filelist[i].length();
UI.size+=filelist[i].length();
UI.filecount++;
}
}
}
return foldersize;
}
public static String getReadableSizeByte(long size) {
if(size <= 0) return "0";
final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
int digitGroups = (int) (Math.log10(size)/Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups))
+ " " + units[digitGroups];
}
public static String getReadableSizeK(long size) {
if(size <= 0) return "0";
final String[] units = new String[] { " ","K", "M", "B", "T"};
int digitGroups = (int) (Math.log10(size)/Math.log10(1000));
return new DecimalFormat("#,##0.#").format(size/Math.pow(1000, digitGroups))
+ " " + units[digitGroups];
}
}
- UI.java
公共class UI im補充(9.3)的ActionListener {
private JFrame fr;
private JPanel pn;
static JLabel folderSize, info, folderCountlbl, fileCountlbl;
private JTextField tf;
private JButton but;
public static long size, foldercount, filecount, nonfilecount;
public int i = 0;
public UI() {
fr = new JFrame();
pn = new JPanel();
info = new JLabel("Type the folder path !!!");
folderSize = new JLabel();
folderCountlbl = new JLabel();
fileCountlbl = new JLabel();
tf = new JTextField(12);
but = new JButton("Count the size !!!");
pn.add(info);
pn.add(tf);
pn.add(but);
pn.add(folderSize);
pn.add(folderCountlbl);
pn.add(fileCountlbl);
but.addActionListener(this);
fr.add(pn);
fr.setSize(220, 180);
fr.setLocationRelativeTo(null);
fr.setResizable(false);
fr.setVisible(true);
fr.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == but) {
if (new File(tf.getText()).isDirectory()) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(FileSizeCounter
.getReadableSizeByte(FileSizeCounter.getFileSize(new File(tf.getText()))));
}
});
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
while (t.isAlive()) {
folderSize.setText("Size of the folder " + FileSizeCounter.getReadableSizeByte((size)));
folderCountlbl
.setText("Number of folders " + FileSizeCounter.getReadableSizeK(foldercount));
fileCountlbl.setText("Number of files " + FileSizeCounter.getReadableSizeK(filecount));
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
folderSize.setText("Size of the folder " + FileSizeCounter.getReadableSizeByte((size)));
folderCountlbl.setText("Number of folders " + FileSizeCounter.getReadableSizeK(foldercount));
fileCountlbl.setText("Number of files " + FileSizeCounter.getReadableSizeK(filecount));
}
});
t1.start();
t.start();
}
else {
JOptionPane.showMessageDialog(fr, "Wrong path. Try again.", "ERROR", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
}
}
}
- 和Main.java
公共類主要{
public static void main(String args[]) {
new UI();
}
}
設我谷歌你:https://docs.oracle.com/javase/tutorial/uiswing/ components/progress.html#bars,https://docs.oracle.com/javase/tutorial/uiswing/examples/components/ProgressBarDemoProject/src/components/ProgressBarDemo.java – Yev
那麼,你想使用的JLabel在哪裏?你試過什麼了?你希望我們寫你的代碼嗎? – UDKOX
謝謝你,我自己找到了解決方案,並且在回答中發佈它,也許有人會使用它。 –