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(); } }