前段时间学习的IO流基础知识,现整理出来,以备以后查看

一、File类

1、文件和文件夹的创建

windows中文件路径用 \ 区分,Unix中用 / 区分

import java.io.File;
import java.io.IOException;public class FileDemo01 {public static void main(String[] args) {try {//注意,如果文件夹或者文件已存在,则调用下列方法失败//创建文件File file1 = new File("D:\\test1.txt");boolean createFile = file1.createNewFile();System.out.println(createFile? "创建文件成功" : "创建文件失败");//创建文件夹File file2 = new File("D:\\test1");boolean creatDir = file2.mkdir();System.out.println(creatDir? "创建文件夹成功" : "创建文件夹失败");//创建多级文件夹File file3 = new File("D:\\test2\\html\\span");boolean createDirs = file3.mkdirs();System.out.println(createDirs? "创建多级文件夹成功" : "创建多级文件夹失败");} catch (IOException e) {e.printStackTrace();}}
}

2、文件删除和查询

文件删除

import java.io.File;public class FileDemo02 {public static void main(String[] args) {//文件删除File file = new File("D:\\test1.txt");boolean deleteFlag = file.delete();System.out.println("文件删除结果:"+ deleteFlag);}
}

文件是否存在、文件大小(英文字母占1字节,中文汉字占3字节)、文件名和文件绝对路径查询

import java.io.File;
import java.io.IOException;public class FileDemo03 {public static void main(String[] args) {try {File file = new File("D:\\test.txt");//查询文件是否存在boolean fileExist = file.exists();if (fileExist) {System.out.println("文件已存在");} else {//不存在则创建文件boolean createFile = file.createNewFile();System.out.println("文件不存在,文件创建结果:"+createFile);}//判断文件大小,返回的是字节Long fileSize = file.length();System.out.println("文件大小为:"+fileSize);//获取文件路径String filePath = file.getAbsolutePath();System.out.println("文件路径为:"+filePath);//获取文件名称String fileName = file.getName();System.out.println("文件名是:"+fileName);} catch (IOException e) {e.printStackTrace();}}
}

3、递归

能不用递归就尽量不用递归,如果处理层数较多的文件夹以及文件时可以考虑

import java.io.File;public class FileDemo04 {public static void showFile(String filePath) {File file = new File(filePath);//判断当前文件是否是文件夹boolean isDirectory = file.isDirectory();//如果是文件夹,那么输出该文件夹下的所有文件if (isDirectory) {File[] files = file.listFiles();//对数组进行非空判断if (null != files && 0 != files.length) {//对所有文件进行for循环,如果是文件夹,就递归调用本方法,如果不是就输出文件路径for (File tempFile: files) {if (tempFile.isDirectory()) {showFile(tempFile.getPath());} else {System.out.println("普通文件,路径为:"+tempFile.getPath());}}}} else {//如果不是文件,那么输出文件路径System.out.println("普通文件,路径为:"+file.getPath());}}public static void main(String[] args) {FileDemo04.showFile("D:\\tools\\chrome");}
}

二、IO流

io流关闭原则

1、字节流

字节输入流
FileInputStream BufferInputStream 的祖宗类InputStream

1)FileInputStream 文件字节输入流

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class FileInputStreamDemo01 {public static void main(String[] args) {try {//初始化程序到文件的通道//FileInputStream inputStream = new FileInputStream("D:\\test.txt");//第二种初始化方法,这种好些,可以判断文件是否存在且文件字节长度是否大于0,满足条件存在才建立连接File file = new File("D:\\inPut.txt");FileInputStream fileInputStream = new FileInputStream(file);//读取文件,用while判断文件是否已被读取完System.out.println(file.length());int cha = 0;while (-1 != (cha = fileInputStream.read())) {System.out.print((char) cha);}//关闭文件和程序之间的通道fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}
}

注意:FileInputStream里面的read()方法只能一个个读取字节,读取中文就有问题

2)BufferedInputStream,字节缓冲输入流

读取更快,可以一次读取多个字节

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;public class BufferedInputStreamDemo04 {public static void main(String[] args) {try {//创建读取文件流InputStream ins = new FileInputStream("D:\\inPut.txt");BufferedInputStream bins = new BufferedInputStream(ins);//声明每次读取的字节数量byte[] read = new byte[1024];int len = 0;//每次读取固定的字节,最后一次读取可能读不满while (-1 != (len = bins.read(read))) {System.out.println(len);}//关闭文件读取流bins.close();ins.close();} catch (Exception e) {e.printStackTrace();}}
}

字节输出流
FileOutputStream BufferOutputStream 的祖宗类OutputStream

1)FileOutputStream 文件字节输出流

import java.io.FileOutputStream;public class FileOutputStreamDemo02 {public static void main(String[] args) {try {//声明要输入的内容String content = "yes,you are right!";//声明管道连接到盘符,这里的append,如果传true,那么就会把要写入盘符的内容拼在文件的最后面FileOutputStream fos = new FileOutputStream("D:\\outPut.txt", true);//获取字节数组byte[] tempBytes = content.getBytes();//写入盘符,如果文件不存在则会帮我们自动创建文件fos.write(tempBytes);//关闭输出流fos.close();} catch (Exception e) {e.printStackTrace();}}
}

2)BufferedOutStream,字节缓冲输出流

输出更快,可以一次输出多个字节

import java.io.*;public class BufferedOutputStreamDemo05 {public static void main(String[] args) {try {//创建文件读取输入流InputStream ins = new FileInputStream("D:\\inPut.txt");BufferedInputStream bins = new BufferedInputStream(ins);//创建文件输入流OutputStream outs = new FileOutputStream("D:\\copy2.txt");BufferedOutputStream bos = new BufferedOutputStream(outs);//设置每次读取的字节数量byte[] bytes = new byte[1024];int len = 0;//读取文件,持续写入while (-1 != (len = bins.read(bytes))) {bos.write(bytes, 0, len);}//关闭输入输出流bos.close();outs.close();bins.close();ins.close();} catch (Exception e) {e.printStackTrace();}}
}

3)IO流实现复制

先读取再写入

import java.io.FileInputStream;
import java.io.FileOutputStream;public class FileCopyDemo03 {public static void main(String[] args) {try {//创建读取文件流FileInputStream fis = new FileInputStream("D:\\inPut.txt");//创建输出文件流FileOutputStream fos = new FileOutputStream("D:\\copy.txt");int ch = 0;//判断文件是否读取完毕while (-1 != (ch = fis.read())) {fos.write(ch);}//关闭文件输入输出流fos.close();fis.close();} catch (Exception e) {e.printStackTrace();}}
}

2.字符流

读取纯文本文件比较方便,帮我们处理的中文乱码问题,按照字符读取文件

1)FileReader 字符输入流

import java.io.FileReader;public class FileReaderDemo06 {public static void main(String[] args) {try {//创建字符读取流FileReader fr = new FileReader("D:\\China.txt");//设置每次读取的字符数量char[] chars = new char[1024];int len = 0;//读取文件while (-1 != (len = fr.read(chars))) {//char转StringString str = new String(chars, 0, len);System.out.println("文件的内容为:" + str);}//关闭读取流fr.close();} catch (Exception e) {e.printStackTrace();}}
}

2)FileWriter 字符输出流

import java.io.FileWriter;public class FileWriterDemo07 {public static void main(String[] args) {try {//声明字符串String content = "    是的,我也爱她";//创建文件字符输出流,传true的时候,字符会拼接在原文件的最后FileWriter fwt = new FileWriter("D:\\copyChina.txt", true);//写入字符fwt.write(content);//关闭输出流fwt.close();} catch (Exception e) {e.printStackTrace();}}
}

如有错误,欢迎指正

【IO流】初学IO流相关推荐

  1. java学习笔记-初学IO流

    目 录 什么是IO IO流的分类 Java中的IO流 java中需要掌握的流:16个 字节流 java.io.FileInputStream(字节输入流) java.io.FileOutputStre ...

  2. IO流 字符流 字节流 缓冲流 文件的复制

    IO流 IO概述 IO流就是一个管道,是用来在设备之间传输数据 input:相对于内存/程序 往进走输入流 output:相对于内存/程序 往硬盘写入 分类 根据数据进出方式 1.输出流: FileW ...

  3. Java IO 字节流与字符流 (三)

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

  4. c++语言文件流,C++ IO类、文件输入输出、string流详细讲解

    新的C++标准中有三分之二的内容都是描述标准库.接下来重点学习其中几种核心库设施,这些是应该熟练掌握的. 标准库的核心是很多容器类(顺序容器和关联容器等)和一簇泛型算法(该类算法通常在顺序容器一定范围 ...

  5. java io文件流序列化_Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类...

    一.properties集合 集合对象Properties类,继承Hashtable,实现Map接口,可以和IO对象结合使用,实现数据的持久存储. 特点: Hashtable的子类,map集合中的方法 ...

  6. IO流之过滤流介绍:

    过滤流: IO流按功能分类可以分为节点流和过滤流,节点流是用来直接操作目标设备的流,比如我们前面介绍的FileReader.FileWriter.FileInputStream.FileOutputS ...

  7. Java IO流之转换流

    一.转换流 1.在IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换流 2.转换流用于在字节流和字符流之间转换 3.转换流本身是字符流 二.两种转换流 Ou ...

  8. 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...

    因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...

  9. java byte char io流_吃透Java IO:字节流、字符流、缓冲流

    前言有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身, ...

  10. Java18-day09【字节缓冲流、字符流、编码表、字符串与字符流中的编码解码问题、字符流读写数据的方式、字符缓冲流、IO流小结】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

最新文章

  1. 现代hy-9600音响_从音响工程师到软件工程师-为什么我要学习编码
  2. 链表问题7——判断一个链表是否为回文结构(进阶)
  3. python 神经网络中隐藏层的作用是什么?
  4. 基于GRU和am-softmax的句子相似度模型 | 附代码实现
  5. 线程之一:JAVA线程基础
  6. Java语言中提供了三个日期类_Java语言学习(5)-Java中基础封装类(日期、时间类)...
  7. asc码转换 linux_Linux网络服务04——FTP文件传输服务
  8. 函数指针的应用学习Demo
  9. 关于解决锐捷校园网客户端与vm虚拟机网络冲突问题的方法
  10. html中body写什么,HTML中body内常用标签
  11. C++ 坦克大战小游戏EGE图形界面
  12. 生活四大勤,让老人延年益寿
  13. DS18B20的CRC验证算法
  14. 网上打印店可以急速打印东西吗?
  15. 微信小游戏开发实战教程3-绘制网格
  16. SpringBoot 微信点餐系统学习记录六-订单表和订单详情表的后端开发
  17. antd table分页,关于react的antd表格分页的问题
  18. 期末项目——同源药膳堂
  19. 国内GitHub加速clone方法
  20. NC 开发各种常用方法

热门文章

  1. 彻底删除Navicat注册表
  2. 日语资料和电子版教材无偿分享
  3. 栈、队列、数组的区别
  4. 预防死锁,检测死锁,避免死锁,解除死锁....
  5. python爬虫入门------王者荣耀英雄及皮肤数据爬取项目
  6. 国际短信平台接口调用的方法步骤,简单5步快速教程
  7. C语言实现归并排序——2路归并排序
  8. 记录开发错误:ORA-00911: 无效字符
  9. 【Java基础】(八)方法(即C等语言中的函数)
  10. vue设置页面滚动高度_vue 解决无法设置滚动位置的问题