`
zhuozhuobeauty
  • 浏览: 18046 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

文件总结——见识到API的强大

    博客分类:
  • java
 
阅读更多

1.文件系统基本规则的要点

(1)相对目录指不以路径分隔符开头的文件路径,绝对目录是指以根目录开头的路径;当前目录指相对于程序运行时的目录算起的相对路径

(2)目录分隔符和路径分隔符在linux和win平台上不同,前者为“/”和“:”,后者为“\”和“;”,因此不要硬编码到程序中,而应使用File类提供的相应属性值

2.构造器

File(File parent, String child)
          根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)
          通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(String parent, String child)
          根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URI uri)
          通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

3.重要方法

 int compareTo(File pathname)
          按字母顺序比较两个抽象路径名。
boolean delete()
          删除此抽象路径名表示的文件或目录。
boolean

equals(Object obj)
          测试此抽象路径名与给定对象是否相等。

 String getPath()
          将此抽象路径名转换为一个路径名字符串。

 

 String getAbsolutePath()
          返回此抽象路径名的绝对路径名字符串。

 

4.练习:实现全盘遍历,按文件名查找,按文件类型查找

//查找的监听器类

package filetongji;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class SearchListener implements ActionListener{
	private JComboBox jco1,jco2;
	private JTextField jte;
	private JTextArea ja;
	private String name, pwd,path,path2;
    //重写一个构造方法
	public SearchListener(JComboBox jco1,JComboBox jco2, JTextField jte ,JTextArea ja) {
		this.jco1 = jco1;
		this.jco2 = jco2;
		this.jte=jte;
		this.ja = ja;
	}
	/**
	 * 事件处理方法 重写事件接口的抽象方法
	 */
	public void actionPerformed(ActionEvent arg0) {
		path = jco1.getSelectedItem().toString();
		pwd = jte.getText();
		path2 = jco2.getSelectedItem().toString();
		if (path.equals("C:\\")) {
			CountFileThread fc=new CountFileThread("C:\\",ja,path2,pwd);
			fc.start();//启动线程
		} else if(path.equals("E:\\")){
			CountFileThread fc=new CountFileThread("E:\\",ja,path2,pwd);
			fc.start();//启动线程
		}else if(path.equals("F:\\")){
			CountFileThread fc=new CountFileThread("F:\\",ja,path2,pwd);
			fc.start();//启动线程
		}
		
	}
}

 

// 统计文件数量跟打印文件路径的独立线程

package filetongji;

import java.io.File;

import javax.swing.JTextArea;

public class CountFileThread extends Thread{
	private JTextArea jte;
	private String path2;
	private String pwd;

	/**
	 * 统计一个磁盘文件数量的线程类
	 */
	public CountFileThread(String root,JTextArea jte,String path2,String pwd){
		this.rootDirName=root;
		this.jte=jte;
		this.path2 = path2;
		this.pwd = pwd;
	}
	
	//线程执行入口:调用线程对象Start()方法后,线程就从他的run方法开始独立执行
	public void run(){
		long start=System.currentTimeMillis();
		int fileCount=countDir(this.rootDirName);
		long timeCost=System.currentTimeMillis()-start;
		String temp=jte.getText();
		jte.setText(temp+"-------驱动器:"+this.rootDirName+"统计完毕:"
			+";所需要寻找的文件数量:"+fileCount+";用时(单位:秒):"+timeCost/1000+"\n");

		
	}
	/**
	 * 计算一个文件下面所有文件的长度
	 * @param dir:要计算的目录的名字
	 * @return: 文件的总长度
	 */
	private int countDir(String dir){
		int count=0;//文件长度变量
		File dirFile=new File(dir);
		if(!dirFile.exists())//如果用户输入的目录不存在
		{return count;}
		File[] subFile=dirFile.listFiles();
		if(subFile==null)//如果列表子文件不存在
		{	return  count;}
		for(int i=0;i<subFile.length;i++){
			String fileName=subFile[i].getAbsolutePath();
			if(subFile[i].isDirectory()){
				//递归计算目录下文件长度
				count+=countDir(subFile[i].getAbsolutePath());
			}
			//先判断文本框中是否输入了文件名
                        //如果没有输入则进入全盘查找,按文件类型查找
                        if(pwd.equals(""))//这里千万不能在()里面写null!因为pwd的指向是地址!!这样是判断他的地址是否为空!
			{
			if(subFile[i].isFile()){
			//如果选定所有类型,则在TextArea上打印所有
                                if(path2.equals("all"))
				{jte.append("文件:"+fileName+"\n");
				count++;
				}
                       //如果选定某一种类型,则打印后缀名相同的文件
				else if(fileName.endsWith(path2))
				{jte.append("文件:"+fileName+"\n");
				count++;
				}
			  }
			
			}
                        //如果指定了文件名,则打印后缀名与文件名相同的文件路径
			else if(fileName.endsWith(pwd))
			{jte.append("文件:"+fileName+"\n");
			count++;
			}
		}
		return count;
	}
	
	private String rootDirName;/**本文件所操作的根目录的名称*/
}

 //主函数

package filetongji;


import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Filemanage extends JFrame{
	public static void main(String args[]){
		Filemanage st=new Filemanage();
		st.init();
	}

	private void init() {
		this.setTitle("查找文件");
		this.setDefaultCloseOperation(3);
		this.setSize(600,550);
		this.setLocation(200,100);
		add();
		this.setVisible(true);
		
	}
	//给窗体加入组件
	public void add(){
		JLabel[] jl=new JLabel[3];
		jl[0]=new JLabel("路程");
		jl[1]=new JLabel("文件名");
		jl[2]=new JLabel("扩展名");
		String[] q1=new String[4];
		String[] q2=new String[5];
		q1[0]=new String("C:\\");
		q1[1]=new String("E:\\");
		q1[2]=new String("F:\\");
		q1[3]=new String("  ");
		q2[0]=new String("all");
		q2[1]=new String(".txt");
		q2[2]=new String(".exe");
		q2[3]=new String(".doc");
		q2[4]=new String(".rar");
//这是一个很强大的东东大事没有半毛钱用。。。	JFileChooser jfc1=new JFileChooser();
//		JFileChooser jfc2=new JFileChooser();
		JComboBox jfc1=new JComboBox(q1);
		JComboBox jfc2=new JComboBox(q2);
		JTextField jt=new JTextField(6);
		JPanel jp=new JPanel();
		JButton jb=new JButton("查找");
		jp.add(jl[0]);
		jp.add(jfc1);
		jp.add(jl[1]);
		jp.add(jt);
		jp.add(jl[2]);
		jp.add(jfc2);
		jp.add(jb);
		
		this.add(jp,BorderLayout.NORTH);
		
		JTextArea jte=new JTextArea(23,80);
		JScrollPane jp1 = new JScrollPane(jte);
		this.add(jp1,BorderLayout.CENTER);
		
		//创建监听器,传入数据
		SearchListener se=new 	SearchListener(jfc1,jfc2,jt,jte);
		jb.addActionListener(se);
	}
}

 5.写文件的一点感受

第一,又一次见到了递归的强大!!有木有!!

第二,如何去取得一个文件的路径,file.getAbsolutePath()

第三,带滚动条的面板JScrollPane!!简直是神器!!直接解决了我前期构想,想要添加一个面板,面板上放TextArea,再放两个滚动条,再放监听器各种神马的一系列麻烦的事情。。。

第四,如何在TextArea上显示所有的文件路径,jte.append("文件:"+fileName+"\n"),而不是setText(),这样每一条路径就会依次覆盖

第五,如何找到指定文件类型的文件,String类中又有一个神器级别的方法fileName.endsWith(string),又一次避免了我麻烦的想法~~

这些神器的存在,提醒我要多多翻看利用API,API是如此的强大!!要啥有啥!!

还有一点是,不要闭门造车,不知道有带滚动条的面板深深的伤害了我~~导致我研究了很久,应该要多多与大神交流的- -还有那个取后缀的,也是在百般捉摸无果的情况下,吸取前面的教训,求助了队友~~

好哒,今天完成了很多任务,姐姐我很是开心~~O(∩_∩)O哈哈~

现在是晒运行结果时间~~~



 

 

 

 

  • 大小: 35.5 KB
  • 大小: 22 KB
  • 大小: 107.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics