java系列17:File文件类、字节流、字符流

一、File文件类

Java要操作文件,先要把文件看作对象。

例1:创建目录和文件

package test;

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

public class TestFile {
    public static void main(String[] args) {
        File file = new File("aaa");
        if(!file.exists()) {
            file.mkdir(); // 创建目录
        }
        File a = new File(file, "a.txt");
        if(!a.exists()) {
            try {
                a.createNewFile(); // 创建文件
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
java系列17:File文件类、字节流、字符流_第1张图片
运行结果:创建了一个目录和文件

例2:获取文件的属性

package test;

import java.io.File;

public class TestFile2 {
    public static void main(String[] args) {
        File file = new File("aaa/a.txt");
        System.out.println(file.getName()); // 文件的名称
        System.out.println(file.getAbsolutePath()); // 文件的绝对路径
        System.out.println(file.length()); // 文件的大小
        System.out.println(file.exists()); // 文件是否存在
        System.out.println(file.canRead()); // 是否可读
        System.out.println(file.canWrite()); // 是否可写
        // System.out.println(file.delete()); // 删除文件
        File[] files = file.listFiles(); // 获得目录下所有的子目录和文件
    }
}
java系列17:File文件类、字节流、字符流_第2张图片
运行结果

例3:listFiles()方法,获得目录下所有的子目录和文件

package test;

import java.io.File;

/**
 * 打印出G盘的所有文件
 * @author xiangdonglee
 *
 */
public class TestFile3 {
    public static void main(String[] args) {
        File file = new File("G:\\Downloads");
        File[] files = file.listFiles();
        printAllFile(files);
    }

    public static void printAllFile(File[] files) {
        for (int i = 0; i < files.length; i++) {
            if(files[i].isFile()) {
                System.out.println(files[i].getAbsolutePath());
            } else {
                File[] files1 = files[i].listFiles();
                printAllFile(files1); // 递归遍历目录
            }
        }
    }
}
java系列17:File文件类、字节流、字符流_第3张图片
运行结果

二、IO

作用:

  • 操作系统文件(读、写)
  • 用于网络数据的传输

流:用来操作系统文件的工具。
分为:输入流、输出流
从内容上分:字节流、字符流

在使用流的时候,必须有开有关。


三、字节流

1、FileInputStream

例1:

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class TestIO {
    public static void main(String[] args) {
        File file = new File("aaa/a.txt");
        FileInputStream fis = null;
        if(file.exists()) {
            try {
                fis = new FileInputStream(file);
                // 使用文件输入流,一个字符一个字符地读取数据
                // 效率很低,主要学习如何查看帮助文档,自己解决问题
                for (int i = 0; i < file.length(); i++) {
                    System.out.print((char)fis.read());
                }
                fis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
java系列17:File文件类、字节流、字符流_第4张图片
先在aaa.txt中写入内容
java系列17:File文件类、字节流、字符流_第5张图片
运行结果

例2:

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class TestIO2 {
    public static void main(String[] args) {
        File file = new File("aaa/a.txt");
        FileInputStream fis = null;
        if(file.exists()) {
            try {
                fis = new FileInputStream(file);
                byte[] buf = new byte[6];
                while(fis.read(buf) != -1) {
                    // System.out.println(buf); // 数组打印出来是地址
                    System.out.println(new String(buf));
                }
                fis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
java系列17:File文件类、字节流、字符流_第6张图片
为什么是这样的结果?

例3:

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * 字符流最高效的读法
 * @author xiangdonglee
 *
 */
public class TestIO3 {
    public static void main(String[] args) {
        File file = new File("aaa/a.txt");
        FileInputStream fis = null;
        if(file.exists()) {
            try {
                fis = new FileInputStream(file);
                byte[] buf = new byte[6];
                int len = 0;
                while((len = fis.read(buf)) != -1) {
                    // System.out.println(buf); // 数组打印出来是地址
                    System.out.println(new String(buf, 0, len));
                }
                fis.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
java系列17:File文件类、字节流、字符流_第7张图片
运行结果

2、FileOutputStream

例1:

package test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Scanner;

/**
 * 输出流往文件中写
 * @author xiangdonglee
 *
 */
public class TestIO4 {
    public static void main(String[] args) {
        File file = new File("aaa/a.txt");
        FileOutputStream fos = null;
        Scanner scan = new Scanner(System.in);
        if(file.exists()) {
            try {
                fos = new FileOutputStream(file);
                System.out.println("请输入您想说的话:");
                String say = scan.nextLine();
                fos.write(say.getBytes());
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        
        }
    }
}
java系列17:File文件类、字节流、字符流_第8张图片
输入hello java
java系列17:File文件类、字节流、字符流_第9张图片
在a.txt中写入了hello java

例2:请用户输入任何内容到a.txt中,直到输入88结束

package test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Scanner;

/**
 * 请用户输入任何内容到a.txt中,直到输入88结束
 * @author xiangdonglee
 *
 */
public class TestIO5 {
    public static void main(String[] args) {
        File file = new File("aaa/a.txt");
        FileOutputStream fos = null;
        Scanner scan = new Scanner(System.in);
        if(file.exists()) {
            try {
                fos = new FileOutputStream(file);
                System.out.println("请输入您想说的内容:");
                while(true) {
                    String say = scan.nextLine();
                    if(say.equals("88")) {
                        break;
                    }
                    fos.write((say + "\r\n").getBytes());
                }
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
java系列17:File文件类、字节流、字符流_第10张图片
运行结果

四、字符流

1、FileReader

例:

java系列17:File文件类、字节流、字符流_第11张图片
读取D盘下hello_java.txt中的内容
package test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;

/**
 * 读取D盘下hello_java.txt中的内容
 * @author xiangdonglee
 *
 */
public class TestFileReader {
    public static void main(String[] args) {
        File file = new File("D:/hello_java.txt");
        FileReader fr = null;
        char[] chary = new char[10];
        int len = 0;
        if(file.exists()) {
            try {
                fr = new FileReader(file);
                while((len = fr.read(chary)) != -1) {
                    System.out.println(new String(chary, 0, len));
                }
                fr.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
java系列17:File文件类、字节流、字符流_第12张图片
运行结果

2、FileWriter

例:

package test;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class TestFileWriter {
    public static void main(String[] args) {
        File file = new File("b.txt");
        if(!file.exists()) {
            try {
                file.createNewFile();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        try {
            FileWriter fw = new FileWriter(file);
            System.out.println("请输入您想说的内容:");
            Scanner scan = new Scanner(System.in);
            String say = scan.nextLine();
            fw.write(say);
            fw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
java系列17:File文件类、字节流、字符流_第13张图片
运行结果

你可能感兴趣的:(java系列17:File文件类、字节流、字符流)