JAVA基础-IO流(一)
一、IO流
IO流是Java为方便我们对文件的读写进行操作而提供的一种技术。按照读取写入文件的方式不同可以分为字符流和字
节流,而每个流派按照功能又分为读和写。字符流读写操作的根类为Reader和Writer,其实现的常用子类分别为、写:
PrintWriter、FileWriter、BufferedWriter、OutputStreamWriter(这个为转换流后边会详细说)。读:BufferedReader、
InputStreamReader(转换流)、 FileReader。
二、Reader抽象类
Reader为用于读取字符流的抽象类,为其子类定义了一些常用方法:
(1)关闭流并释放资源、close()
(2)读取单个字符、read()
返回值为int类型(作为整数读取字符 - 字符对应的ASCII值,读取不到值则返回-1)。
(3)将字符读入字符数组、read(char[] cbuf)
返回值为int(读取的字符数,如果已到达流的末尾,则返回 -1 )。
1、FileReader类
FileReader类为Reader抽象类的间接继承类(爷爷类),其直系父类为InputStreamReader类,是用来读取字符文件的便
捷类。其常用的构造方法为:
(1)FileReader(String fileName),如果是相对路径(读取文件在你的项目根目录),参数为要读取的文件名。如果是绝对
路径的话(在你电脑的其他盘),参数则为全的路径名、如:"d:\\lala.java"。
(2)FileReader(File file) ,参数为要读取的File对象(File类可以通过传入字符类型的文件路径 - File(String pathname)
、URI - File(URI uri) 、父目录的File对象加子路径 - File(File parent, String child)、根据 parent 路径名字符串和
child 路径名字符串创建一个新 File 实例 - File(String parent, String child) )。
* 一次读取一个字符举例:
//throws IOException抛出IO异常
public static void main(String[] args) throws IOException {
//创建FileReader对象,传入相对路径
FileReader reader = new FileReader("lcy.txt");
//接收读取的字符
int i;
//循环读取,当读完整个文件时i=-1退出循环
while ((i = reader.read()) != -1) {
//转为char类型
char s=(char) i;
System.out.println(s);
}
//关闭流
reader.close();
}
** 一次读取一个字符数组举例:
public static void main(String[] args) throws IOException {
//创建FileReader对象,传入相对路径
FileReader reader = new FileReader("lcy.txt");
//数组的长度
int i;
char[] ch=new char[1024];
//循环读取,将读出来的字符存到ch数组里,当读完整个文件时i=-1退出循环
while ((i=reader.read(ch))!=-1) {
System.out.println(Arrays.toString(ch));
}
//关闭流
reader.close();
}
2、BufferedReader类
BufferedReader类是从字符输入流中读取文本,缓冲各个字符,从而实现高效读取,他是一种高效的读取方式。
BufferedReader类可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。其常用的
构造方法为BufferedReader(Reader in) ,创建一个使用默认大小输入缓冲区的缓冲字符输入流。除了继承父类所
有方法外,其特有的方法有:
(1)读取一个文本行、readLine()。
* 举例:
//throws IOException抛出IO异常
public static void main(String[] args) throws IOException {
//创建FileReader对象,传入相对路径
FileReader reader = new FileReader("lcy.txt");
//根据FileReader对象,创建BufferedReader对象
BufferedReader bufferedReader = new BufferedReader(reader);
//存放读取的一行数据
String s;
//循环读取,当读取的字符串为空时退出循环
while ((s = bufferedReader.readLine()) != null) {
System.out.println(s);
}
//关闭流
bufferedReader.close();
三、Writer类
写入字符流的抽象类,他为其子类提供了一些常用的方法:
(1)关闭此流,但要先刷新它、close()。
(2)刷新该流的缓冲,将数据刷入到文件里、flush()。
(3)写入字符数组、write(char[] cbuf)。
(4)写入单个字符、write(int c)。
(5)写入字符数组的某一部分、write(char[] cbuf, int off, int len)。
(6)写入字符串、write(String str)。
(7)写入字符串的某一部分、write(String str, int off, int len)。
1、FileWriter类
FileWriter类为Writer抽象类的间接继承类(爷爷类),其直系父类为OutputStreamWriter类,用来写入字符文件的
便捷类。他继承了Writer类的全部方法。其常用的构造方法与FileReader类一样,只不过FileReader类的文件路径一定要
存在,而FileWriter类的文件路径如果存则在指定文件上写,如果不存在则会新建一个文件。
* 常用方法举例:
// throws IOException抛出IO异常
public static void main(String[] args) throws IOException {
// 创建FileReader对象,传入相对路径
FileReader reader = new FileReader("lcy.txt");
// 根据FileReader对象,创建BufferedReader对象
BufferedReader bufferedReader = new BufferedReader(reader);
// 创建FileWriter对象
FileWriter fileWriter = new FileWriter("Demo.txt");
// 存放读取的一行数据
String s;
// 循环读取,当读取的字符串为空时退出循环
while ((s = bufferedReader.readLine()) != null) {
// 像Demo.txt文件写入数据
fileWriter.write(s);
}
// 关闭流
bufferedReader.close();
fileWriter.close();
fileWriter.close();
** 一次写入一个数组举例:
public static void main(String[] args) throws IOException {
// 标准输入流
InputStream in = System.in;
// 转换流
InputStreamReader inputStreamReader = new InputStreamReader(in);
// 创建FileWriter对象
FileWriter fw = new FileWriter("a.txt");
// 存储数组长度
int i;
char[] c = new char[1024];
// 循环读取
while ((i = inputStreamReader.read(c)) != -1) {
// 将数组写入到指定文件,从0一直写到i,目的是为了防止出现重复数据
fw.write(c, 0, i);
// 刷
fw.flush(); }
// 关闭资源
fw.close();
inputStreamReader.close();
}
2、BufferedWriter类
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。其常用构造方法与
BufferedReader类类似。除了继承父类所有方法外,还有其特有的方法:
(1) 写入一个行分隔符、newLine(),无论是Windows系统还是Mac系统都可以实现换行的效果。
(2) 写入字符串的某一部分、write(String s, int off, int len)
* 举例:
// throws IOException抛出IO异常
public static void main(String[] args) throws IOException {
// 创建FileReader对象,传入相对路径
FileReader reader = new FileReader("lcy.txt");
// 根据FileReader对象,创建BufferedReader对象
BufferedReader bufferedReader = new BufferedReader(reader);
// 创建FileWriter对象
FileWriter fileWriter = new FileWriter("Demo.txt");
//创建BufferedWriter对象
BufferedWriter writer = new BufferedWriter(fileWriter);
// 存放读取的一行数据
String s;
// 循环读取,当读取的字符串为空时退出循环
while ((s = bufferedReader.readLine()) != null) {
// 像Demo.txt文件写入数据
writer.write(s);
// 写一行后换行
writer.newLine();
}
// 关闭流
bufferedReader.close();
writer.close();
3、PrintWriter类
PrintWriter具有自动刷新行的功能,如果启用了自动刷新,则只有在调用 println、printf 或 format 的
其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。其常用的构造方法为:
(1)使用指定文件创建不具有自动行刷新的新 PrintWriter - PrintWriter(File file)
(2)根据现有的 OutputStream 创建不带自动行刷新的新 PrintWriter - PrintWriter(OutputStream out)
(3)创建不带自动行刷新的新 PrintWriter - PrintWriter(Writer out)
(4)创建新 PrintWriter - PrintWriter(Writer out, boolean autoFlush) 带自动刷新
(5)通过现有的 OutputStream 创建新的 PrintWriter - PrintWriter(OutputStream out, boolean autoFlush)
可以自动刷新。
常用方法:
(1)打印 Object,然后终止该行。println(Object x) - String、boolean、int、double、char都可以打印、很全面。
* 举例:
public static void main(String[] args) throws Exception {
// 根据new FileReader("lcy.txt")创建BufferedReader对象
BufferedReader br = new BufferedReader(new FileReader("lcy.txt"));
// 创建PrintWriter对象,开启自动刷新
PrintWriter printWriter = new PrintWriter(new FileWriter("d:\\lcy.java"), true);
String s;
while ((s = br.readLine()) != null) {
// 写入数据
printWriter.println(s);
}
// 关闭资源
printWriter.close();
br.close();
}
JAVA基础-IO流(一)的更多相关文章
- Java基础IO流(二)字节流小案例
JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...
- Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)
Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)
Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...
- Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)
Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...
- Java基础-IO流对象之打印流(PrintStream与PrintWriter)
Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...
- Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)
Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...
- java基础-IO流对象之Properties集合
java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...
- Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)
Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...
- Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)
Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...
随机推荐
- 获取本地ip
public void GetLocalIP(string username) { List<string> strIPs = new List<string>(); Netw ...
- Solr集群搭建详细教程(二)
注:欢迎大家转载,非商业用途请在醒目位置注明本文链接和作者名dijia478,商业用途请联系本人dijia478@163.com. 之前步骤:Solr集群搭建详细教程(一) 三.solr集群搭建 注意 ...
- SAP RFC介绍:关于sRFC,aRFC,tRFC,qRFC和bgRFC
大概八月份的时候做过一个有关两个SAP系统的财务集成的项目,使用到了RFC(Remote Function Call)技术.因为之前有着医疗-CRM相关接口开发的经验,以为自己对RFC很熟悉了,做起来 ...
- [C/C++语言标准] ISO C99/ ISO C11/ ISO C++11/ ISO C++14 Downloads
语言法典,C/C++社区人手一份,技术讨(hu)论(peng)必备 ISO IEC C99 https://files.cnblogs.com/files/racaljk/ISO_C99.pdf IS ...
- 谈谈CommonsChunkPlugin抽取公共模块
引言 webpack插件CommonsChunkPlugin的主要作用是抽取webpack项目入口chunk的公共部分,具体的用法就不做过多介绍,不太了解可以参考webpack官网介绍: 该插件是we ...
- Say Hello to ConstraintLayout
ConstraintLayout介绍 ConstraintLayout让你可以在很平的view结构(没有多层布局嵌套)中构建一个复杂的布局结构. 有点像RelativeLayout, 所有的view都 ...
- Java中的集合概述
Java中的集合类有两个重要的分支,分别是接口Collection(包括List,Set等)和接口Map. 由于HashSet的内部实现原理使用了HashMap,所以我们先来了解Map集合类. 1.H ...
- ArcGIS 网络分析[1.1] 创建用于网络分析用的线类型shp文件[这个太基础了吧!]
具体的准备,在上一篇就说过了,不再赘述. 阅读本篇前,需要的预备知识是:ArcGIS创建各种矢量数据的方法,了解地理坐标与投影坐标 本篇只创建单一的线数据,至于点数据,以后进行复杂的网络分析时再添加进 ...
- 浅谈对ST表的一些理解
今天打了人生第一道ST表题(其实只是ST表跑得最快); ST表是一种用来解决RMQ问题的利器... 大体操作有两步: 第一部分nlogn预处理 第二部分O(1)询问 预处理就是运用倍增+区间动规 ST ...
- 安装MongoDB步骤
1.第一步是从官网下载匹配自己操作系统的安装文件或压缩文件: 2.随便找个文件夹先解压安装文件,然后在C盘根目录建立一个新文件夹命名为mongodb: 3.将打开刚刚安装的文件,将bin文件夹拷贝到C ...