遍历目录是操作文件时的一个常见需求。比如写一个程序,需要找到并处理指定目录下的所有JS文件时,就需要遍历整个目录。该项目教会你如何使用流式编程和lambda表达式,帮助你进一步熟悉java8特性,并且通过它实现目录遍历。
看了很多遍历文件的代码,看到自己都头大。递归的还可以理解,lambda那个是真的有些不理解。
最后就是设计一个界面,让这个文件遍历得以在界面里面运行。都很简单,我还是硬啃了一个小时。毕竟原本想把一个类里面的方法调出来,但是只能在控制台输出。没办法,把递归的又写了一遍。
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.io.*;
public class SFWindow extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
private JLabel label1,label2;//两个标签,一个提醒输入,一个提箱输出。
private JButton button;//一个按钮,方便监听实现
private JPanel panel1,panel2;//两个面板,一个中间一个南面
private static JTextArea textarea1;
private static JTextArea textarea2;
//两个多行文本框,一个输入一个输出
public SFWindow() {
label1=new JLabel("请输入文件的绝对路径:");
textarea1=new JTextArea(1,15);
button=new JButton("确定");
button.addActionListener(this);
panel1=new JPanel();
panel1.add(label1);
panel1.add(textarea1);
panel1.add(button);
label2=new JLabel("遍历文件结果:");
textarea2=new JTextArea(4,15);
panel2=new JPanel();
panel2.add(label2);
panel2.add(textarea2);
this.add(panel1,BorderLayout.CENTER);
this.add(panel2,BorderLayout.SOUTH);
this.setTitle("文件目录查询");
this.setSize(340,270);//设置界面大小
this.setVisible(true);
}
//主函数,创建并运行
public static void main(String[] args) {
// TODO Auto-generated method stub
SFWindow sfw=new SFWindow();
sfw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//递归法遍历文件,并输出到多行文本框
public static void Method(String path) {
if(new File(path).isDirectory()) {
String[] childs=new File(path).list();
for(String child:childs) {
Method(path+"\\"+child);
SFWindow.textarea2.append(path+"\\"+child+"\n");
}
}
}
//监听实现
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String path=SFWindow.textarea1.getText();
Method(path);
}
}