文件操作有很多,创建,删除等操作,这些就不说了,我就把自己练习的几个附上吧。
A列出指定目录的全部文件
- public class FileTest {
- /**
- * 列出给定目录的全部文件
- */
- public static void main(String[] args) {
- File f=new File("f:"+File.separator);
- String str[]=f.list();
- for(int i=0;i<str.length;i++){
- System.out.println(str[i]);
- }
- }
- }
list()方法,这个还真不是只看就成,必须练一下手,这才记得深啊。
B列出一个目录中的全部内容
- import java.io.File;
- public class FileDemo1 {
- /**
- * @param args
- */
- public static void main(String[] args) {
- File f=new File("e:"+File.separator);
- File files[]=f.listFiles();
- for(int i=0;i<files.length;i++){
- System.out.println(files[i]);
- }
- }
- }
C判断给定路径是否为目录
- import java.io.File;
- public class FileDemo2 {
- /**
- * 判定一个给定的路径是否是目录
- */
- public static void main(String[] args) {
- File f=new File("e:"+File.separator);
- if(f.isDirectory()){
- System.out.println(f.getPath()+"路径是目录");
- }else{
- System.out.println(f.getPath()+"路径不是目录");
- }
- }
- }
下面是文件搜索器:
上传图片一张:在下面哈。。。
这是我做的简单的文件搜索器界面,还没有界面美化,添加了滚动条,还没有计数的框框,只是简单地把文件搜索和界面连接在一起了。
最花费时间的部分不是界面,也不是文件搜索,而是连接在一起。我当时的思路是:
第一步:搞定文件搜索
第二步:初始化界面
第三步:监听器(匿名内部类)
第四步:怎样把它们联系在一起
有几点:1.最开始的打印出路径的方法search()是在主函数中调用的,那现在想一按“查找”这个按钮,才会在下面的JTextArea区域中显示出所有的路径,所以要在监听器匿名内部类的方法中调用search()方法,代码如下:
- ActionListener al=new ActionListener(){
- public void actionPerformed(ActionEvent e) {
- str1=jtf.getText();
- str2=jtd.getText();
- int count= fs.search(str1, str2);
- if(arrayList==null&&arrayList.size()==0){
- jta.append("您查找的文件不存在!\n");
- System.out.println("您查找的文件不存在!");
- }else{
- for(int i=0;i<arrayList.size();i++){
- jta.append("文件"+arrayList.get(i)+"\n");
- }
- }
- a.append("总数为"+count);
- System.out.println("总数:"+count);
- }
- };
2文件搜索单独定义一个类:
- public class FileSearch {
- //定义一个arrayList对象
- private ArrayList<String> arrayList=new ArrayList<String>();
- private String str2;
- private String str1;
- //构造函数传参数
- public FileSearch(ArrayList<String> arrayList,String str2,String str1){
- this.arrayList=arrayList;
- this.str1=str1;
- this.str2=str2;
- }
- public int search(String str1,String str2){
- int count=0;
- File fl=new File(str1);
- File [] file=fl.listFiles();//列出目录
- if(null==file||file.length==0){
- return 0;
- }
- for(int i=0;i<file.length;i++){
- if(file[i].isDirectory()){
- String filemingzi=file[i].getAbsolutePath();
- count+=search(filemingzi,str2);
- }
- if(file[i].isFile()){
- String subDir=file[i].getAbsolutePath();
- //如果文件与查找的文件名相同,就把路径添加到队列中
- if(subDir.indexOf(str2)>=0){
- count++;
- arrayList.add(subDir);
- }
- // System.out.println("文件:"+subDir);
- // jta.append(file[i].toString()+"\r\n");
- }
- }
- return count;
- }
- }
在这里用了List接口中最常用的ArrayList数组集合,我觉得当时很傻的,想用队列去存储所有的路径,又要增加一个类。并且,上几节课刚学完集合框架,当时还想学这个干嘛,不知道什么时候用的说,结果这果真就联系上了,非常好用。
3JTextArea,嘿,我不会告诉你,我不知道JTextArea有append()方法,当时还用了JOptionPane.showMessageDialog(),结果每一条信息弹出一个对话框,电脑差点崩溃了。。。
4初始化界面:
- public class FileCarry extends JFrame{
- static String str1;
- String str2;
- JTextField jtf;
- JTextField jtd;
- static JTextArea jta;
- FileSearch fs;
- //File [] file;
- String array[];
- private int i;
- private ArrayList<String> arrayList=new ArrayList<String>();
- // FileSearch fs;
- /**
- * @param args
- */
- public static void main(String[] args) {
- FileCarry fc=new FileCarry();
- fc.init();
- }
- private void init() {
- this.setDefaultCloseOperation(3);
- this.setSize(new Dimension(1000,600));
- this.setTitle("文件搜索器");
- this.setLocationRelativeTo(null);
- this.setLayout(new FlowLayout());
- javax.swing.JLabel lblName=new javax.swing.JLabel("要查找的文件所在的盘符:");
- //添加到窗体上
- this.add(lblName);
- jtf=new JTextField(20);
- this.add(jtf);
- JLabel lbl=new JLabel("该盘下要查找的文件");
- this.add(lbl);
- jtd=new JTextField(20);
- this.add(jtd);
- //显示目录的窗口
- JButton jb=new JButton("查找");
- this.add(jb);
- jta=new JTextArea(30,50);
- this.add(jta);
- JScrollPane pane=new JScrollPane(jta);
- this.add(pane);
- fs=new FileSearch(arrayList,str2,str1);
- ActionListener al=new ActionListener(){
- public void actionPerformed(ActionEvent e) {
- str1=jtf.getText();
- str2=jtd.getText();
- int count= fs.search(str1, str2);
- if(arrayList==null&&arrayList.size()==0){
- jta.append("您查找的文件不存在!\n");
- System.out.println("您查找的文件不存在!");
- }else{
- for(int i=0;i<arrayList.size();i++){
- jta.append("文件"+arrayList.get(i)+"\n");
- }
- }
- jta.append("总数为"+count);
- System.out.println("总数:"+count);
- }
- };
- jb.addActionListener(al);
- this.setVisible(true);
- }
- // private int printCount(String str1) {
- // int count=0;
- // File fl=new File(str1);
- // File [] file=fl.listFiles();//列出目录
- // if(null==file||file.length==0){
- // return 0;
- // }
- // for(i=0;i<file.length;i++){
- // if(file[i].isDirectory()){
- // String filemingzi=file[i].getAbsolutePath();
- // // String fileming=file[i].getAbsolutePath();
- // System.out.println("目录:"+filemingzi);
- //
- // jta.append(file[i].toString()+"\r\n");
- // count+=printCount(filemingzi);
- // }
- // if(file[i].isFile()){
- // count++;
- // String subDir=file[i].getAbsolutePath();
- // System.out.println("文件:"+subDir);
- // jta.append(file[i].toString()+"\r\n");
- //
- // }
- }
后面的那个注释掉的printcount方法,是指定目录搜该目录下所有文件的方法,其实和search()方法就有一点差别,不舍得删就放上去了。。。这个还是简易的,我还会再做修改。。。
额。。。自己刚刚重新看了一遍,发现我这注释真不是一般的少啊。。。不好的习惯啊,我一定会改!