zoukankan      html  css  js  c++  java
  • 文件搜索

    文件操作有很多,创建,删除等操作,这些就不说了,我就把自己练习的几个附上吧。

    A列出指定目录的全部文件

    Java代码 复制代码 收藏代码
    1. public class FileTest {
    2. /**
    3. * 列出给定目录的全部文件
    4. */
    5. public static void main(String[] args) {
    6. File f=new File("f:"+File.separator);
    7. String str[]=f.list();
    8. for(int i=0;i<str.length;i++){
    9. System.out.println(str[i]);
    10. }
    11. }
    12. }

    list()方法,这个还真不是只看就成,必须练一下手,这才记得深啊。

    B列出一个目录中的全部内容

    Java代码 复制代码 收藏代码
    1. import java.io.File;
    2. public class FileDemo1 {
    3. /**
    4. * @param args
    5. */
    6. public static void main(String[] args) {
    7. File f=new File("e:"+File.separator);
    8. File files[]=f.listFiles();
    9. for(int i=0;i<files.length;i++){
    10. System.out.println(files[i]);
    11. }
    12. }
    13. }

    C判断给定路径是否为目录

    Java代码 复制代码 收藏代码
    1. import java.io.File;
    2. public class FileDemo2 {
    3. /**
    4. * 判定一个给定的路径是否是目录
    5. */
    6. public static void main(String[] args) {
    7. File f=new File("e:"+File.separator);
    8. if(f.isDirectory()){
    9. System.out.println(f.getPath()+"路径是目录");
    10. }else{
    11. System.out.println(f.getPath()+"路径不是目录");
    12. }
    13. }
    14. }

    下面是文件搜索器:

    上传图片一张:在下面哈。。。

    这是我做的简单的文件搜索器界面,还没有界面美化,添加了滚动条,还没有计数的框框,只是简单地把文件搜索和界面连接在一起了。

    最花费时间的部分不是界面,也不是文件搜索,而是连接在一起。我当时的思路是:

    第一步:搞定文件搜索

    第二步:初始化界面

    第三步:监听器(匿名内部类)

    第四步:怎样把它们联系在一起

    有几点:1.最开始的打印出路径的方法search()是在主函数中调用的,那现在想一按“查找”这个按钮,才会在下面的JTextArea区域中显示出所有的路径,所以要在监听器匿名内部类的方法中调用search()方法,代码如下:

    Java代码 复制代码 收藏代码
    1. ActionListener al=new ActionListener(){
    2. public void actionPerformed(ActionEvent e) {
    3. str1=jtf.getText();
    4. str2=jtd.getText();
    5. int count= fs.search(str1, str2);
    6. if(arrayList==null&&arrayList.size()==0){
    7. jta.append("您查找的文件不存在!\n");
    8. System.out.println("您查找的文件不存在!");
    9. }else{
    10. for(int i=0;i<arrayList.size();i++){
    11. jta.append("文件"+arrayList.get(i)+"\n");
    12. }
    13. }
    14. a.append("总数为"+count);
    15. System.out.println("总数:"+count);
    16. }
    17. };

    2文件搜索单独定义一个类:

    Java代码 复制代码 收藏代码
    1. public class FileSearch {
    2. //定义一个arrayList对象
    3. private ArrayList<String> arrayList=new ArrayList<String>();
    4. private String str2;
    5. private String str1;
    6. //构造函数传参数
    7. public FileSearch(ArrayList<String> arrayList,String str2,String str1){
    8. this.arrayList=arrayList;
    9. this.str1=str1;
    10. this.str2=str2;
    11. }
    12. public int search(String str1,String str2){
    13. int count=0;
    14. File fl=new File(str1);
    15. File [] file=fl.listFiles();//列出目录
    16. if(null==file||file.length==0){
    17. return 0;
    18. }
    19. for(int i=0;i<file.length;i++){
    20. if(file[i].isDirectory()){
    21. String filemingzi=file[i].getAbsolutePath();
    22. count+=search(filemingzi,str2);
    23. }
    24. if(file[i].isFile()){
    25. String subDir=file[i].getAbsolutePath();
    26. //如果文件与查找的文件名相同,就把路径添加到队列中
    Java代码 复制代码 收藏代码
    1. if(subDir.indexOf(str2)>=0){
    2. count++;
    3. arrayList.add(subDir);
    4. }
    5. // System.out.println("文件:"+subDir);
    6. // jta.append(file[i].toString()+"\r\n");
    7. }
    8. }
    9. return count;
    10. }
    11. }

    在这里用了List接口中最常用的ArrayList数组集合,我觉得当时很傻的,想用队列去存储所有的路径,又要增加一个类。并且,上几节课刚学完集合框架,当时还想学这个干嘛,不知道什么时候用的说,结果这果真就联系上了,非常好用。

    3JTextArea,嘿,我不会告诉你,我不知道JTextArea有append()方法,当时还用了JOptionPane.showMessageDialog(),结果每一条信息弹出一个对话框,电脑差点崩溃了。。。
    4初始化界面:

    Java代码 复制代码 收藏代码
    1. public class FileCarry extends JFrame{
    2. static String str1;
    3. String str2;
    4. JTextField jtf;
    5. JTextField jtd;
    6. static JTextArea jta;
    7. FileSearch fs;
    8. //File [] file;
    9. String array[];
    10. private int i;
    11. private ArrayList<String> arrayList=new ArrayList<String>();
    12. // FileSearch fs;
    13. /**
    14. * @param args
    15. */
    16. public static void main(String[] args) {
    17. FileCarry fc=new FileCarry();
    18. fc.init();
    19. }
    20. private void init() {
    21. this.setDefaultCloseOperation(3);
    22. this.setSize(new Dimension(1000,600));
    23. this.setTitle("文件搜索器");
    24. this.setLocationRelativeTo(null);
    25. this.setLayout(new FlowLayout());
    26. javax.swing.JLabel lblName=new javax.swing.JLabel("要查找的文件所在的盘符:");
    27. //添加到窗体上
    28. this.add(lblName);
    29. jtf=new JTextField(20);
    30. this.add(jtf);
    31. JLabel lbl=new JLabel("该盘下要查找的文件");
    32. this.add(lbl);
    33. jtd=new JTextField(20);
    34. this.add(jtd);
    35. //显示目录的窗口
    36. JButton jb=new JButton("查找");
    37. this.add(jb);
    38. jta=new JTextArea(30,50);
    39. this.add(jta);
    40. JScrollPane pane=new JScrollPane(jta);
    41. this.add(pane);
    42. fs=new FileSearch(arrayList,str2,str1);
    43. ActionListener al=new ActionListener(){
    44. public void actionPerformed(ActionEvent e) {
    45. str1=jtf.getText();
    46. str2=jtd.getText();
    47. int count= fs.search(str1, str2);
    48. if(arrayList==null&&arrayList.size()==0){
    49. jta.append("您查找的文件不存在!\n");
    50. System.out.println("您查找的文件不存在!");
    51. }else{
    52. for(int i=0;i<arrayList.size();i++){
    53. jta.append("文件"+arrayList.get(i)+"\n");
    54. }
    55. }
    56. jta.append("总数为"+count);
    57. System.out.println("总数:"+count);
    58. }
    59. };
    60. jb.addActionListener(al);
    61. this.setVisible(true);
    62. }
    63. // private int printCount(String str1) {
    64. // int count=0;
    65. // File fl=new File(str1);
    66. // File [] file=fl.listFiles();//列出目录
    67. // if(null==file||file.length==0){
    68. // return 0;
    69. // }
    70. // for(i=0;i<file.length;i++){
    71. // if(file[i].isDirectory()){
    72. // String filemingzi=file[i].getAbsolutePath();
    73. // // String fileming=file[i].getAbsolutePath();
    74. // System.out.println("目录:"+filemingzi);
    75. //
    76. // jta.append(file[i].toString()+"\r\n");
    77. // count+=printCount(filemingzi);
    78. // }
    79. // if(file[i].isFile()){
    80. // count++;
    81. // String subDir=file[i].getAbsolutePath();
    82. // System.out.println("文件:"+subDir);
    83. // jta.append(file[i].toString()+"\r\n");
    84. //
    85. // }
    86. }

    后面的那个注释掉的printcount方法,是指定目录搜该目录下所有文件的方法,其实和search()方法就有一点差别,不舍得删就放上去了。。。这个还是简易的,我还会再做修改。。。

    额。。。自己刚刚重新看了一遍,发现我这注释真不是一般的少啊。。。不好的习惯啊,我一定会改!

  • 相关阅读:
    设备驱动开发之缓冲区读写操作
    什么是80Plus
    INF Manufacturer Section
    C++编程获得某台机器的IP地址
    INF DestinationDirs Section
    importlib模块
    django的内置信号
    auth模块(登录验证)
    头像文件的预览
    powerDesiger 常用设置
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3575903.html
Copyright © 2011-2022 走看看