【IO流】初学IO流
前段时间学习的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流相关推荐
- java学习笔记-初学IO流
目 录 什么是IO IO流的分类 Java中的IO流 java中需要掌握的流:16个 字节流 java.io.FileInputStream(字节输入流) java.io.FileOutputStre ...
- IO流 字符流 字节流 缓冲流 文件的复制
IO流 IO概述 IO流就是一个管道,是用来在设备之间传输数据 input:相对于内存/程序 往进走输入流 output:相对于内存/程序 往硬盘写入 分类 根据数据进出方式 1.输出流: FileW ...
- Java IO 字节流与字符流 (三)
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- c++语言文件流,C++ IO类、文件输入输出、string流详细讲解
新的C++标准中有三分之二的内容都是描述标准库.接下来重点学习其中几种核心库设施,这些是应该熟练掌握的. 标准库的核心是很多容器类(顺序容器和关联容器等)和一簇泛型算法(该类算法通常在顺序容器一定范围 ...
- java io文件流序列化_Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类...
一.properties集合 集合对象Properties类,继承Hashtable,实现Map接口,可以和IO对象结合使用,实现数据的持久存储. 特点: Hashtable的子类,map集合中的方法 ...
- IO流之过滤流介绍:
过滤流: IO流按功能分类可以分为节点流和过滤流,节点流是用来直接操作目标设备的流,比如我们前面介绍的FileReader.FileWriter.FileInputStream.FileOutputS ...
- Java IO流之转换流
一.转换流 1.在IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换流 2.转换流用于在字节流和字符流之间转换 3.转换流本身是字符流 二.两种转换流 Ou ...
- 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...
因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...
- java byte char io流_吃透Java IO:字节流、字符流、缓冲流
前言有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身, ...
- Java18-day09【字节缓冲流、字符流、编码表、字符串与字符流中的编码解码问题、字符流读写数据的方式、字符缓冲流、IO流小结】
视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java ...
最新文章
- 现代hy-9600音响_从音响工程师到软件工程师-为什么我要学习编码
- 链表问题7——判断一个链表是否为回文结构(进阶)
- python 神经网络中隐藏层的作用是什么?
- 基于GRU和am-softmax的句子相似度模型 | 附代码实现
- 线程之一:JAVA线程基础
- Java语言中提供了三个日期类_Java语言学习(5)-Java中基础封装类(日期、时间类)...
- asc码转换 linux_Linux网络服务04——FTP文件传输服务
- 函数指针的应用学习Demo
- 关于解决锐捷校园网客户端与vm虚拟机网络冲突问题的方法
- html中body写什么,HTML中body内常用标签
- C++ 坦克大战小游戏EGE图形界面
- 生活四大勤,让老人延年益寿
- DS18B20的CRC验证算法
- 网上打印店可以急速打印东西吗?
- 微信小游戏开发实战教程3-绘制网格
- SpringBoot 微信点餐系统学习记录六-订单表和订单详情表的后端开发
- antd table分页,关于react的antd表格分页的问题
- 期末项目——同源药膳堂
- 国内GitHub加速clone方法
- NC 开发各种常用方法