Java学习day34-io流和File类

一、io流的主要内容

1.java.io.File类的使用(计算机操作系统中的文件盒文件夹)

2.IO原理及流的分类

  ①文件流(数据流的读写都是基于文件的操作)

  FileInputStream / FileOutputStream / FileReader / FileWriter

  ②缓冲流(数据流的读写都是基于内存的操作)

  BufferedInputStream / BufferedOutputStream / BufferedReader / BufferedWriter

  ③转换流

  InputStreamReader / OutputStreamWriter

  ④标准输入/输出流

  ⑤打印流(了解)

  PrintStream / PrintWriter

  ⑥数据流(了解)

  DataInputStream / DataOutputStream

  ⑦对象流---涉及到序列化、反序列化(把一个对象转化为一个数据流进行读写)

  ObjectInputStream / ObjectOutputStream

  ⑧随机存取文件流

  RandomAccessFile

 二、File类

1.java.io.File类:文件和目录路径名的抽象表示形式,与平台无关。

2.File能创建、删除、重命名文件和目录,但File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。

3.File对象可以作为参数传递给流的构造函数。

4.File类的常见构造方法:

  ①public File(String pathname)

  以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。

  ②public File(String parent,String child)

  以parent为父路径,child为子路径创建File对象。File的静态属性String separator存储了当前系统的路径分隔符。在UNIX中,此字段为‘/’,在Windows中,为'\\'。

package day17;

import java.io.File;

public class Test {
    public static void main(String[] args){
        File f = new File("D:\\Test\\tt.txt");//这个时候对象f就是tt.txt文件
//        File f1 = new File("D:\\Test","Test\\tt.txt");//这个f1也是tt.txt文件,这种写法较少
//        File f2 = new File("D:/Test/tt.txt");//这样写也可
//        File f3 = new File("D:" + File.separator + "D:\\Test\\tt.txt");//这样写也可
        
        //注意,\在文件中是路径的分隔符,但是在java编程中,\是转义符,\\才是文件分隔符.也可以使用File。separator作为文件分隔符
    }
}

5.File类代表与平台无关的文件和目录。

6.File能新建、删除、重命名文件和目录,但File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。

 1 package day17;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 
 6 public class Test {
 7     public static void main(String[] args){
 8         File f = new File("D:\\Test\\tt.txt");//这个时候对象f就是tt.txt文件
 9 //        File f1 = new File("D:\\Test","Test\\tt.txt");//这个f1也是tt.txt文件,这种写法较少
10 //        File f2 = new File("D:/Test/tt.txt");//这样写也可
11 //        File f3 = new File("D:" + File.separator + "D:\\Test\\tt.txt");//这样写也可
12         File f4 = new File("D:\\Test");
13         
14         //注意,\在文件中是路径的分隔符,但是在java编程中,\是转义符,\\才是文件分隔符.也可以使用File。separator作为文件分隔符
15         
16         System.out.println(f.getName());//获取文件名
17         System.out.println(f4.getName());//获取当前的文件名称
18         
19         File f5 = new File("bin/day14/Test.java");//使用相对路径来创建File对象
20         
21         System.out.println(f5.getPath());//获取当前文件或者文件夹的相对路径
22         System.out.println(f5.getAbsolutePath());//获取当前文件或者文件夹的绝对路径
23         
24         System.out.println(f5);
25         System.out.println(f5.getAbsoluteFile());//返回一个用当前文件的绝对路径构建的File对象
26         
27         System.out.println(f5.getParent());//返回当前文件或者文件夹的父级路径
28         
29         f.renameTo(new File("D:\\Test\\tt1.txt"));//给文件或文件夹重命名
30         
31         File f6 = new File("D:\\Test\\tt1.txt");
32         System.out.println(f6.exists());//判断文件或者文件夹是否存在
33         
34         File f7 = new File("D:\\Test\\tt1.txt");
35         System.out.println(f7.canWrite());//判断文件是否可写
36         System.out.println(f7.canRead());//判断文件是否可读
37         
38         System.out.println(f7.isFile());//判断当前的File对象是不是文件
39         System.out.println(f7.isDirectory());//判断当前的File对象是不是文件夹
40         
41         System.out.println(f7.lastModified());//获取文件的最后的修改时间,返回的是一个毫秒数
42         
43         System.out.println(f7.length());//返回文件的长度,单位是字节
44         
45         File f8 = new File("D:\\Test\\tt2.txt");
46         System.out.println(f8.exists());//判断是不是存在tt2.txt这个文件(判断文件是否存在)
47         if(!f8.exists()){//如果没有tt2.txt
48             try {
49                 f8.createNewFile();//则创建一个tt2.txt(创建一个新的文件)
50             } catch (IOException e) {
51                 // TODO Auto-generated catch block
52                 e.printStackTrace();
53             }
54         }
55         
56 //        f8.delete();//删除文件
57         
58 //        File f9 = new File("D:\\Test\\cc");
59 //        f9.mkdir();//创建单层目录,如果使用这样的方法创建多层目录需要一层一层的执行mkdir()方法
60 //        File f10 = new File("D:\\Test\\a\\b\\c");
61 //        f10.mkdirs();//这个方法是直接创建多层目录
62         
63         File f11 = new File("D:\\Test");
64         String[] f1 = f11.list();//返回的是当前文件夹的子集的名称,包括目录和文件
65         for(String s : f1){
66         System.out.println(s);
67         }
68         
69         File[] fs = f11.listFiles();//返回的是当前文件夹的子集的File对象,包括目录和文件
70         for(File ff : fs){
71             System.out.println(ff);
72         }
73         
74     }
75 }

递归算法

package day17;

import java.io.File;
import java.io.IOException;

public class Test {
    public static void main(String[] args){
        
        //遍历d盘下的test文件,把test文件夹下所有的目录与文件全部遍历出来,不论层级有多深,要全部遍历出来
        //需要使用递归的方式来实现
        File f = new File("D:\\Test");
        new Test().test(f);
    }
    
    /**
     * 递归遍历文件
     * @param file
     * */
    public void test(File file){
        if(file.isFile()){
            System.out.println(file.getAbsolutePath() + " 是文件");
        }else{
            System.out.println(file.getAbsolutePath() + " 是文件夹");
            //如果是文件夹,这个文件夹里就可能有子文件夹或文件
            File[] fs = file.listFiles();//获取当前文件夹下的子文件夹或者文件的file对象
            if(fs != null && fs.length > 0){
                for(File ff : fs){
                    test(ff);//递归
                    
//                    if(ff.isFile()){//重复了上面的操作
//                        System.out.println(file.getAbsolutePath() + " 是文件");
//                    }else{
//                        System.out.println(file.getAbsolutePath() + " 是文件夹");
//                    }

} } } } }

猜你喜欢

转载自www.cnblogs.com/su-peng/p/12588441.html