这两天在做文件搜索器,涉及到很多有关File的知识,绕的有点晕:
1.File类的用途
1.File可以帮助我来操作系统中的文件,对文件进行新建删除,修改,查找
2.文件:相对路径和绝对路径
相对路径:new ImageIcon(“images/1.jpg”); 与src是同级的目录
绝对路径:只要带上盘符
(尽量用相对路径)
3.不同操作系统的分隔符会不同,实用通用的常量来实现
2.File类常用的方法和常量
.File类在java.io的包下,
Boolean exsits():判断文件是否存在
String getame():得到文件名字
Boolean isDirectory():判断是否为文件目录
Boolean isFile():判断是否为文件
Boolean delete() 删除此抽象路径名表示的文件或目录
File getAbsolutePath():得到路径名
File[] listFiles():得到一个路径名数组
Boolean creatNewFile():创建一个新的文件
3.得到电脑的根目录:
File[] fl = File.listRoots();
fl[i]. getAbsolutePath();
fl.lenth//目录的个数
4.递归:自身调用自身的方法
5.File类的常用方法测试
package FileSearch;
import java.io.File;
public class FileTest {
//列出机器上的根目录
public void listRoots(){
//直接调用File类的static方法
File[] lf = File.listRoots();
System.out.println("磁盘上的目录个数是:"+lf.length);
for(int i=0;i<lf.length;i++){
System.out.println("第"+i+"个目录:"+lf[i].getAbsolutePath());
}
}
//测试文件创建与delete
public void testCreatAndDelete(String fileName){
//通过传入的名字构造File对象
File temFile = new File(fileName);
//判断文件是否存在
if(temFile.exists()){
//如果是一个目录
if(temFile.isDirectory()){
System.out.println("这是一个目录:"+temFile.getAbsolutePath());
}
//如果是一个文件
if(temFile.isFile()){
System.out.println("文件长度是:"+temFile.length());
//删除文件
temFile.delete();
String theName=temFile.getName();
String absPath=temFile.getAbsolutePath();
System.out.println("文件已删除,名字是"+theName+"绝对路径是:"+absPath);
}
}
else{
try{
temFile.createNewFile();
System.out.println("文件已创建!"+temFile.getAbsolutePath());
//打印出文件长度
System.out.println("文件长度是:"+temFile.length());
}
catch(Exception ef){
System.out.println("创建文件失败!");
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
FileTest ft = new FileTest();
ft.listRoots();
ft.testCreatAndDelete("测试文件");
}
}
6.用递归法搜索文件
package FileSearch;
import java.io.File;
public class FileDisplay {
//打印某个目录下的文件名字,并返回文件个数
public int printDir(String dirName){
int filecount=0;
File dirFile = new File(dirName);
File[] subFile = dirFile.listFiles();//列表目录
if(null==subFile||subFile.length==0){//是空目录或者文件
return 0;
}
//遍历一级子目录
for(int i=0;i<subFile.length;i++){
if(subFile[i].isDirectory()){
String subDir=subFile[i].getAbsolutePath();
System.out.println("目录:"+subDir);
filecount+=printDir(subDir);
}
if(subFile[i].isFile()){
filecount++;
String FileName=subFile[i].getAbsolutePath();
System.out.println("文件:"+FileName);
}
}
return filecount;
}
/**
* @param args
*/
public static void main(String[] args) {
FileDisplay fd= new FileDisplay();
String dirName = "src";
int count=fd.printDir("src");
System.out.println(dirName+"目录下共找到文件个数是:"+count);
}
}
7.
实现文件选择器
//实例化一个文件选择器
JFileChooser chooser = new JFileChooser();
//设置为打开方式的文件选择器
chooser.setDialogType(JFileChooser.OPEN_DIALOG);
//设置只能打开文件目录
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//获取文件选择其中按钮的信息
int t=chooser.showOpenDialog(null);
//当用户点击打开时,获得要搜索的文件名
if(t==chooser.APPROVE_OPTION){
path=chooser.getSelectedFile().getAbsolutePath();
tex.setText(path);
}
8.文件搜索器
文件搜索器的功能要能是要根据相应的路径或者关键字找到相应的文件名,功能更强大一点的话,还能够根据关键字找到跟文件内容相关的文件。其实就是上面6,7两端代码的组合,再弄个界面,添加上监听器就行了。
相关代码如下:
package FileSeacher1;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class FileSeacher extends JFrame {
//添加图片
java.net.URL seach = FileSeacher.class.getResource("1.jpg");
javax.swing.ImageIcon seacher = new javax.swing.ImageIcon(seach);
java.net.URL open = FileSeacher.class.getResource("2.jpg");
javax.swing.ImageIcon opener = new javax.swing.ImageIcon(open);
public void showUI(){
this.setSize(600,600);
this.setTitle("文件搜索器");
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setLayout(null);
//文件选择器的相关文本域和按钮
JTextField tex = new JTextField(20);
tex.setBounds(140, 20, 300, 30);
this.add(tex);
JButton but = new JButton("打开");
but.setBounds(60, 20, 75, 28);
but.setIcon(opener);
this.add(but);
JButton bu = new JButton("搜索");
bu.setBounds(450, 20, 60, 29);
bu.setIcon(seacher);
this.add(bu);
//文本域
JTextArea area=new JTextArea();
//area.setBounds(30,130,500,350);
//this.add(area);
//滚动面板
JScrollPane sp=new JScrollPane(area);
sp.setBounds(20,100,550,440);
//this.add(sp);
this.getContentPane().add(sp);
//文件选择器的监听器
FileOpenListener fo=new FileOpenListener(tex);
but.addActionListener(fo);
//文件搜索器的监听器
FileSearchListener fl=new FileSearchListener(tex,area);
bu.addActionListener(fl);
this.setVisible(true);
}
public static void main(String[] args) {
FileSeacher fs = new FileSeacher();
fs.showUI();
}
}
package FileSeacher1;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class FileSearchListener implements ActionListener{
private JTextField tex;
private JTextArea area;
public FileSearchListener(JTextField tex,JTextArea area){
this.tex=tex;
this.area=area;
}
//打印某个目录下的文件名字,并返回文件个数
public int printDir(String dirName){
int filecount=0;
File dirFile = new File(dirName);
File[] subFile = dirFile.listFiles();//列表目录
if(null==subFile||subFile.length==0){//是空目录或者文件
return 0;
}
//遍历一级子目录
for(int i=0;i<subFile.length;i++){
if(subFile[i].isDirectory()){
String subDir=subFile[i].getAbsolutePath();
area.append("目录:"+subDir+"\n");
//System.out.println("目录:"+subDir);
filecount+=printDir(subDir);
}
if(subFile[i].isFile()){
filecount++;
String FileName=subFile[i].getAbsolutePath();
area.append("文件:"+FileName+"\n");
//System.out.println("文件:"+FileName);
}
}
return filecount;
}
@Override
public void actionPerformed(ActionEvent e) {
String str=tex.getText();
//printDir(str);
area.append(str+"目录下共找到文件个数是:"+printDir(str)+"\n");
//System.out.println(str+"目录下共找到文件个数是:"+printDir(str));
}
}
package FileSeacher1;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFileChooser;
import javax.swing.JTextField;
public class FileOpenListener implements ActionListener{
private JTextField tex;
private String path;
public FileOpenListener(JTextField tex){
this.tex=tex;
}
public void actionPerformed(ActionEvent e) {
//实例化一个文件选择器
JFileChooser chooser = new JFileChooser();
//设置为打开方式的文件选择器
chooser.setDialogType(JFileChooser.OPEN_DIALOG);
//设置只能打开文件目录
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//获取文件选择其中按钮的信息
int t=chooser.showOpenDialog(null);
//当用户点击确定时,获得要搜索的文件名
if(t==chooser.APPROVE_OPTION){
path=chooser.getSelectedFile().getAbsolutePath();
tex.setText(path);
//System.out.println("要搜索的文件名是:"+tex);
}
}
}