高级API入门之File类的使用【01】

File类的使用

 (1)IO包的作用:对文件进行读(读取文件中的信息内容)和写(将内容保存到文件中)
        
 (2)① File:一个类,处于JavaAPI中的io包中
                  需要进行导包
         ② 作用:对文件进行创建,删除,修改等操作。但是不能将信息保存在文件中
        
         ③ File的概念:对一个磁盘路径下的文件夹或文件的路径进行一个抽象的描述。
                         在Java程序中如果要指定电脑上的某一个文件,使用File类可以实现

         ④  怎么实现?

                   ——利用File实例化即可。

   //通过File(String path);来构建一个File对象以此来描述电脑上的某一个文件或文件夹信息
		
	File f1 = new File("D:\\hello");
		


        
   (3)File中的方法
           1. isFile 判断是否是文件

           2. isDirectory 判断是否是目录(文件夹)

           3. isHidden判断是否是隐藏文件

		System.out.println(file.isFile());//判断是否为文件?
		System.out.println(file.isDirectory());//判断是否为文件夹
		System.out.println(file.isHidden());//判断是否为隐藏文件

           4. exists 判断所关联的文件是否存在

        //	判断文件或文件夹是否存在?
		if(f1.exists()) {//true
			System.out.println("已存在"+f1.exists());
		}else {
			System.out.println("不存在"+f1.exists());
		}

           5. createNewFile 创建一个文件

//		创建文件createNewFile  有异常
//		需求:如果使用exists方法判断文件不存在 那么使用创建的方法来创建文件
		if(!f1.exists()) {
			boolean b = f1.createNewFile();
			if(b == true) {
				System.out.println("创建成功");
			}else {
				System.out.println("已创建");
			}
			
		}else {
			System.out.println("已存在了");
		}

           6. mkdir 创建一个文件夹

//		给定一个指定路径的File对象,来创建文件夹
		if(!f1.exists()) {
		//创建文件夹
			f1.mkdir();
			System.out.println("创建文件夹成功");
		}

           7. getPath 获得文件的路径
              getName 获得文件名
              getParent是获得文件的上一次父目录的名字(父路径)

           8. length 获得文件长度,以字节为单位

		System.out.println(file.getName());//获取文件名称
		System.out.println(file.getAbsolutePath());//获取文件的绝对路径
		System.out.println(file.getPath());//获取路径
		System.out.println(file.getParent());//获取父级路径
		System.out.println(file.length());//字节数

           9. lastModified 获得文件的最后修改时间 返回类型为long

        //获取最后的修改时间
		long time = file.lastModified();//这个毫秒值是1970年1月1日到当前系统时间的毫秒差
		Date date = new Date(time);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss:SSS");
		String format = sdf.format(date);
		System.out.println("该文件最后修改的时间为: "+format);
		
		

           10. delete删除指定路径的文件(不能删除不能为空的文件夹)

           11. list  获得文件夹下面所有文件的名字
                listFile 是获得文件夹下面的所有文件对象

//list方法  获取某个目录下的所有文件名		
		File file = new File("D:\\");
		String[] names = file.list();
		for (String name : names) {
			System.out.println(name);
		}
//		listFiles  获取某个目录下的所有文件信息(File对象)
		File file = new File("D:\\");
		File files[] = file.listFiles();
		for (File file2 : files) {
			System.out.println(file2.getName()+"----"+file2.length());
		}

           

     12. listRoots 获得当前系统的盘符

  

//		获取电脑上的所有磁盘
		File[] listRoots = File.listRoots();
		for (File file : listRoots) {
			System.out.println(file.getPath());
		}

递归:适用于Java的方法 

         核心:方法调用方法本身

① 利用递归找到相应文件

/**
	 * 方法功能:使用递归的方式实现某个目录下的所有文件(不管里面有多少个子文件夹 都会获取到其中的文件)
	 */
	public void findFileAll(File file) {
		//1.先判断提供的文件对象是否是文件还是文件夹
		if(file.isFile()) {//如果是文件
			System.out.println(file.getPath());
		}else if(file.isDirectory()) {//如果是文件夹
			//2.获取该文件夹下所有为文件信息(包括文件夹以及文件)
			File[] listFiles = file.listFiles();
			if(listFiles == null) {//过滤掉系统文件  没有权限去访问
				return;
			}
			//3.遍历文件信息数组
			for (File file2 : listFiles) {
				//4.判断文件信息数组中的每一个file2对象是否是文件还是文件夹
				//利用递归的思想调用方法本身  再执行判断一次
				findFileAll(file2);
			}
		}
	}

② 使用递归的方式实现将某个目录下的所有.txt文件查找出来

	public void findTxtAll(File file) {
		if(file.isFile()) {
//			System.out.println(file.getPath());
			//需求:限制文件的输出  只要txt  其他不需要   
			//先得到文件的名称
			String fileName = file.getName();
//			System.out.println(fileName);
			//筛选:  因为有些系统文件是没有扩展名也没有.
			int index = fileName.lastIndexOf(".");
			if(index!=-1) {
				//截取扩展名 substring
				String hz = fileName.substring(index);
//				System.out.println(hz);
				if(".mp4".equals(hz)) {
					System.out.println(fileName);
				}
			}
		}else if(file.isDirectory()) {
			File[] listFiles = file.listFiles();
			for (File file2 : listFiles) {
				findTxtAll(file2);
			}
		}
	}

③ 删除指定目录下的指定文件(.txt)

public void delTxtAll(File file) {
		if(file.isFile()) {
//			System.out.println(file.getPath());
//			获取文件名
			String fileName = file.getName();
			int index = fileName.lastIndexOf(".");
			if(index!=-1) {
				String hz = fileName.substring(index);
				if(".txt".equals(hz)) {
					file.delete();
				}
			}
		}else if(file.isDirectory()) {
			File[] listFiles = file.listFiles();
			if(listFiles==null) {
				return;
			}
			for (File file2 : listFiles) {
				delTxtAll(file2);
			}
		}
	}

利用窗体实现功能: 

package com.lixiangning.files;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Date;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class Work_03 extends JFrame {

	
//	作业3	swing界面版
	
	private JPanel jpa = new JPanel();
	private JTextField jtfa = new JTextField(25);
	private JFileChooser jfc = new JFileChooser();
	private JButton jbe = new JButton("选择文件");
	private JButton jba = new JButton("查询");
	
//	
	
	private DefaultTableModel dtm = new DefaultTableModel();
	private JTable jta = new JTable(dtm);
	private JScrollPane jsp = new JScrollPane(jta);
	
	
	
	private JPanel jpb = new JPanel();
	private JButton jbb = new JButton("删除.txt文件");
	private JButton jbc = new JButton("删除小于5KB文件");
	private JButton jbd = new JButton("删除近一个月修改的文件");
	
	
	
	
	
    public Work_03() {

        this.setTitle("");
        this.setSize(720,520);
        this.setDefaultCloseOperation(3);
        this.setLocationRelativeTo(null);
    
        jtfa.setEditable(false);
        jpa.add(jtfa);
        jpa.add(jbe);
        jpa.add(jba);
        
        dtm.addColumn("文件路径");
        dtm.addColumn("文件名");
        dtm.addColumn("后缀名");
        dtm.addColumn("文件大小");
        dtm.addColumn("修改时间");
        
        jpb.add(jbb);
        jpb.add(jbc);
        jpb.add(jbd);
        
    
     
        this.getContentPane().add(jpa,"North");
        this.getContentPane().add(jsp,"Center");
        this.getContentPane().add(jpb,"South");
        
        myClick();
    
        this.setVisible(true);
    
    }
	
    public void myClick() {
    	
        /**选择文件
    	 * @author Administrator
    	 *
    	 */
    	jbe.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				jfc.showDialog(null, "请选择文件");
				File file=jfc.getSelectedFile();
				//获取文件夹信息
				jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);		
				if(null !=file) {
					jtfa.setText(file.getPath());
				}
				
			}
		});

    	/**
    	 * 查询按钮
    	 */
    	jba.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				//查询前,需要把前面获取的数据删除
				//获取表格的行数
				int row=dtm.getRowCount();
				for (int i = 0; i < row; i++) {
					dtm.removeRow(0);
				}
				File file=new File(jtfa.getText());
				findFiles(file);
			}
		});
    	
    	/**
    	 * 删除.txt文件
    	 */
    	jbb.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {

//				删除.txt文件
				File file=new File(jtfa.getText());
				delTxtAll(file);
				int row=dtm.getRowCount();
				for (int i = 0; i < row; i++) {
					dtm.removeRow(0);
				}
				findFiles(file);
			}
		});
    	
    	/**
    	 * 删除小于5KB文件
    	 */
    	jbc.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				File file=new File(jtfa.getText());
				delSizeAll(file);
				int row=dtm.getRowCount();
				for (int i = 0; i < row; i++) {
					dtm.removeRow(0);
				}
				findFiles(file);
			}
		});
    	
    	
    	jbd.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {

				
				
				
				
			}
		});
    	
    	
    }
	
    public void findFiles(File file) {
    	if(file.isFile()) {
    		Vector vc=new Vector();
    		//文件路径
    		vc.add(file.getPath());
    		//文件名
    		String name = file.getName();
    		vc.add(name);
    		//后缀名
    		vc.add(name.substring(name.lastIndexOf(".")));
    		//文件大小
    		vc.add(file.length()/1024);
    		//修改时间
    		vc.add(new Date(file.lastModified()).toLocaleString());
    		dtm.addRow(vc);
    	}else if(file.isDirectory()) {
    		File[] files = file.listFiles();
    		for (File file2 : files) {
				findFiles(file2);
			}
    	}
    }
    
    
    public void delTxtAll(File file) {
    	if(file.isFile()) {
//			获取文件名
			String fileName = file.getName();
			long length = file.length()/1024;
			if(length<5) {
			    file.delete();
			}
		}else if(file.isDirectory()) {
			File[] listFiles = file.listFiles();
			if(listFiles==null) {
				return;
			}
			for (File file2 : listFiles) {
				delTxtAll(file2);
			}
		}
    }
    
    public void delSizeAll(File file) {
    	if(file.isFile()) {
//			获取文件名
			String fileName = file.getName();
			int index = fileName.lastIndexOf(".");
			if(index!=-1) {
				String hz = fileName.substring(index);
				if(".txt".equals(hz)) {
					file.delete();
				}
			}
		}else if(file.isDirectory()) {
			File[] listFiles = file.listFiles();
			if(listFiles==null) {
				return;
			}
			for (File file2 : listFiles) {
				delTxtAll(file2);
			}
		}
    }
	
	public static void main(String[] args) {
		new Work_03();
	}

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ning_ning_03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值