Java IO流

一.File类

public void test01() throws IOException {
    //文件或目录的绝对路径
    File file = new File("f:/a.jpg");
    file = new File("f:/","a.jpg");

    //创建文件,目录必须正确,文件存在时返回false
    file.createNewFile();
    //创建一层目录和多层目录
    file.mkdir();
    file.mkdirs();

    //判断方法,返回true/false
    file.exists();
    file.isDirectory();
    file.isFile();
    //获取方法
    System.out.println();
    //获取文件名,父目录名,父目录,完整路径,文件大小
    file.getName();
    file.getParent();
    file.getParentFile();
    file.getPath();
    file.length();
    //获取当前目录所有目录和文件,目录名和文件名,盘符
    file.listFiles();
    file.list();
    File.listRoots();
    //删除文件或目录(目录中有文件删除不了)
    file.delete();
    //移动文件或重命名
    file.renameTo(new File("f:/b.jpg"));
}

二.字符流

1.FileReader类和FileWriter类

public void test01() throws Exception {
    //文件不存在会报错
//  FileReader reader = new FileReader(new File("f:/a.txt"));
    FileReader reader = new FileReader("f:/a.txt");
    int num = 0;
    String word = "";
    char[] buf = new char[10];
    //一个一个字读出来
    while((num = reader.read()) !=-1) {
        word += (char)num;
    }
    //按数组的长度读出来放数组里
    while((num = reader.read(buf))!=-1) {
        word += new String(buf,0,num);
    }
    reader.close();
    System.out.println(word);
}
public void test02() throws IOException {
    //为false或无时,是覆盖.为true时是追加。
    FileWriter w = new FileWriter("f:/b/a",false);
    FileWriter w2 = new FileWriter(new File("f:/b/a"),true);
    //文件不存在会自动创建,目录不存在会报错
    FileWriter writer = new FileWriter("f:/b.txt");

    char[] buf = {'一','二'};
    //写入字符数组,字符,字符串
    writer.write(buf);
    writer.write('三');
    writer.write("四五六");
    //返回Writer对象
    writer.append('七').append("八九十");

    //将缓存区数据写入,
    //在close中会自动调用,无须在close前显式调用
    writer.flush();
    writer.close();
}

2.BufferedReader类和BufferedWriter类

public void test03() throws IOException {
    FileReader r = new FileReader("f:/a/a.txt");
    FileWriter w = new FileWriter("f:/b/b.txt");
    //使用缓冲区,提高效率
    BufferedReader br = new BufferedReader(r);
    //允许自定义缓冲区大小(FileWriter的缓存区太小)
    BufferedWriter bw = new BufferedWriter(w,1024*10);
    String word;
    //提供了一个读行的方法
    while ((word = br.readLine())!=null) {
        bw.write(word);
        bw.newLine();
    }
    bw.close();
    br.close();
    r.close();
    w.close();
}

三.字节流

1.FileInputStream类和FileOutputStream类

public void test01() throws Exception {
    FileInputStream input = new FileInputStream("f:/a.jpg");
    FileOutputStream output = new FileOutputStream("f:/b.jpg");
    //获取文件大小,可作为数组长度(大文件慎用)
    input.available();
    byte[] buf = new byte[1024];
    int len;
    while((len = input.read(buf))!=-1) {
        output.write(buf, 0, len);
    }
    output.close();
    input.close();
}

2.BufferedInputStream类和BufferedOutputStream类

public void test02() throws Exception {
    FileInputStream i = new FileInputStream("f:/a.jpg");
    FileOutputStream o = new FileOutputStream("f:/b.jpg");
    BufferedInputStream input = new BufferedInputStream(i);
    BufferedOutputStream output = new BufferedOutputStream(o,1024*60);

    byte[] buf = new byte[1024];
    int len;
    while((len = input.read(buf))!=-1) {
        output.write(buf, 0, len);
    }
    output.close();
    input.close();
}

四.总结

类名描述
FileReader字符输入流
FileWriter字符输出流
BufferedReader缓存字符输入流
BufferedWriter缓存字符输出流
FileInputStream字节输入流
FileOutputStream字节输出流
BufferedInputStream缓存字节输入流
BufferedOutputStream缓存字节输出流

.
五.应用

  1. 将base64编码字符串保存成文件
/**
 * 根据base64编码将文件保存到服务器
 * @param base64  base64编码字符串
 * @param filePath  服务器绝对路径
 * @param fileName  文件名
 */
public static void base64UpFile(String base64, String filePath, String fileName) {
    FileOutputStream out = null;
    byte[] buffer;
    try {
        //获取文件对象
        File file = new File(filePath, fileName);
        //判断文件是否存在,不存在则创建
        if (!file.exists()) {
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            file.createNewFile();
        }
        //获取输出流
        out = new FileOutputStream(file);
        //将64base编码转成数组
        buffer = new BASE64Decoder().decodeBuffer(base64);
        //写入文件
        out.write(buffer);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        //关闭输出流
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值