最近学习了java中关于文件的一些处理方法,比如新建文件 ,查找文件
,自定义文件格式等等......
一般我们把文件分为两大类:文本文件和流文件。文本文件是指文件后
缀名为.txt和.java的文件,其存储字节为16位;流文件是指图片、音乐、视频
等文件,其存储字节用8位。
关于文件搜索器,首先根据要搜索的文件名和盘符在当前盘符查找
,如果没有找到与输入的文件名一样的文件就进入下一级目录,递归调用查找文
件的方法。在查找文件的时候会用到的方法有:
exists():测试此抽象路径名表示的文件或目录是否存在。
listFiles(): 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的
目录中的文件。
isDirectory(): 测试此抽象路径名表示的文件是否是一个目录。
isFile():测试此抽象路径名表示的文件是否是一个标准文件。
getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
下面是文件搜索器的代码:
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import javax.swing.JComboBox; import javax.swing.JTextArea; import javax.swing.JTextField; public class FileListener implements ActionListener { //定义一个命令属性 private String command; //定义一个计数器 private int filecount=0; private JTextField filed; private JComboBox com; private JTextArea ta; //在构造器里面初始化属性 public FileListener(JTextField filed,JTextArea ta,JComboBox com){ this.filed=filed; this.ta=ta; this.com=com; } //鼠标点击的事件处理 public void actionPerformed(ActionEvent e) { // 得到点击的命令 command=e.getActionCommand(); //判断命令 if(command.equals("开始搜索")){ System.out.println("*********************************"); //得到搜索的盘符 String pathName=(String) com.getSelectedItem(); //调用文件搜索的方法 int count = 0; try { count = FileCheck(pathName); } catch (Exception e1) { e1.printStackTrace(); } //查找结果 ta.append("总共查找文件数:"+count+"\t查找到的文件数:"+this.filecount); } } /** * 文件搜索的方法 * @return 搜索次数 * @throws Exception */ private int FileCheck(String pathName) throws Exception { // 定义一个计数器 int count = 0; //得到需要查找的文件或目录名 String fileName=filed.getText(); //创建一个File对象 File file=new File(pathName); //判断文件是否存在 if(file.exists()){ //返回file下一级的所有目录和文件 File[] listFile = file.listFiles(); // 判断是否还有文件或者文件目录 if (null == listFile || listFile.length == 0) { return 0; } for(int i=0;i<listFile.length;i++){ //如果是目录 if(listFile[i].isDirectory()){ //得到每一个目录的路径和目录名 String pathname=listFile[i].getAbsolutePath(); String temname=listFile[i].getName(); //判断是否相等 if(temname.equals(fileName)){ ta.append("找到文件夹:"+temname+"\n"+"文件路径:"+pathname+"\n"); this.filecount++; } // 进行递归调用 count += FileCheck(pathname); } //如果是文件 if(listFile[i].isFile()){ //得到文件名 String filename=listFile[i].getName(); //判断是否相等 count++; if(filename.equals(fileName)){ ta.append("找到文件:"+filename+"\n"+"文件路径:"+listFile[i].getAbsolutePath()+"\n"); String pathname=listFile[i].getAbsolutePath(); //调用显示文件的方法 String result = inputFileOne(pathname); //输出文件的内容 ta.append(result); this.filecount++; } } } }else{ javax.swing.JOptionPane.showMessageDialog(null,"文件不存在"); } return count; } private String inputFileOne(String pathname) throws Exception { //创建一个InputStream的对象 InputStream is = new FileInputStream(pathname); //新建一个缓冲流输入对象 BufferedInputStream bis=new BufferedInputStream(is); //得到文件的长度 int length = is.available(); //创建一个byte数组 byte [] content = new byte[length]; //定义一个变量,用来保存读取出来的字节数据 int i = 0; //读取文件 bis.read(content); //把文件输入流对象给关闭 is.close(); bis.close(); //将byte数组转换为字符串 String str = new String(content); return str; } }