JAVA基础学习day19--IO流一、FileWrite与FileReader
一、IO简述
1.1、简述
IO:input/output
IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中。
1.2、结构
字节流抽象类:
InputStream,OutputStream
字符流抽象类:
Reader、Writer。
ps:由这四4个派生出来子类名称都是以父类名作为子类名的后缀
如:InputStream的子类FileInputStream
如:Reader的子类FileReader;
1.3、分类
按操作数据方式为两种:字节流与字符流
按流向分:输入流,输出流
二、Writer
2.1、writer
写入字符流的抽象类。子类必须实现的方法仅有 write(char[], int, int)、flush() 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。
| 字段摘要 | |
|---|---|
protected Object |
lock 用于同步针对此流的操作的对象。 |
| 构造方法摘要 | |
|---|---|
protected |
Writer()创建一个新的字符流 writer,其关键部分将同步 writer 自身。 |
protected |
Writer(Object lock)创建一个新的字符流 writer,其关键部分将同步给定的对象。 |
| 方法摘要 | |
|---|---|
Writer |
append(char c)将指定字符添加到此 writer。 |
Writer |
append(CharSequence csq)将指定字符序列添加到此 writer。 |
Writer |
append(CharSequence csq, int start, 将指定字符序列的子序列添加到此 writer.Appendable。 |
abstract |
close()关闭此流,但要先刷新它。 |
abstract |
flush()刷新该流的缓冲。 |
void |
write(char[] cbuf)写入字符数组。 |
abstract |
write(char[] cbuf, 写入字符数组的某一部分。 |
void |
write(int c)写入单个字符。 |
void |
write(String str)写入字符串。 |
void |
write(String str, 写入字符串的某一部分。 |
三、FileWriter与FileReader
3.1、FileWriter
| 构造方法摘要 | |
|---|---|
FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。 |
|
FileWriter(File file, 根据给定的 File 对象构造一个 FileWriter 对象。 |
|
FileWriter(FileDescriptor fd)构造与某个文件描述符相关联的 FileWriter 对象。 |
|
FileWriter(String fileName)根据给定的文件名构造一个 FileWriter 对象。 |
|
FileWriter(String fileName, 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。 |
|
package com.pb.io.demo1; import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
/*
* close:关闭流,会将流关闭,不能再使用
* flush:flush刷新后,流可以继续使用,
*/
public class WriterDemo { public static void main(String[] args) {
Scanner input=new Scanner(System.in);
File file=null; //文件
FileWriter fw=null; //字符输出流
try {
file=new File("d:/demo.txt");
// fw=new FileWriter(file);//如果有这个文件就会覆盖
//如果要追加到文件内容后面就使用true
fw=new FileWriter(file,true);
System.out.println("请输入内容,请输入 over后结束");
String str=null; //接收输入的内容
char [] buf=new char[1024];//定义缓冲区大小
do{
str=input.nextLine();
buf=str.toCharArray();//转换为字符数组
fw.write(buf); //将字符数组写入
fw.flush();//刷新流
}while(!str.equals("over"));
} catch (IOException e) {
e.printStackTrace();
}finally{
//使用finally关闭流
try {
if(fw!=null)
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("写入结束"); } }
3.2、FileReader
| 构造方法摘要 | |
|---|---|
FileReader(File file) 在给定从中读取数据的 File 的情况下创建一个新 FileReader。 |
|
FileReader(FileDescriptor fd)在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader。 |
|
FileReader(String fileName)在给定从中读取数据的文件名的情况下创建一个新 FileReader。 |
|
3.3示例 单个字符读取
package com.pb.io.demo1; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException; /*
* 单个字符读取
*/ public class FileReaderDemo { public static void main(String[] args) { File file=null; //文件
FileReader fr=null; //字符输入流 try {
file=new File("d:/demo.txt");
fr=new FileReader(file);
int len=0;//接收读出内容 while((len=fr.read())!=-1){
System.out.println((char)len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//关闭流
if(fr!=null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
3.4、示例 数组方式读取 建议使用
package com.pb.io.demo1; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays; /*
* 通过字符数组 读取
*/ public class FileReaderDemo { public static void main(String[] args) { File file=null; //文件
FileReader fr=null; //字符输入流 try {
file=new File("d:/demo.txt");
fr=new FileReader(file);
//接收读出内容数组
char [] buf=new char [1024]; //一般为1024的整数倍
int len=0;
while((len=fr.read(buf))!=-1){ //读取内容到字符数组
System.out.println(new String(buf,0,len));//读有多少,就输出多少 }
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//关闭流
if(fr!=null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
四、完整和复制文件
4.1、字符输入流和字符输入流
package com.pb.io.demo1; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner; public class FileWriterAndFileReader { public static void main(String[] args) {
File file = new File("d:\\demo.txt");
Output(file);
input(file);
} // 写入文件
private static void Output(File file) {
FileWriter fw = null;
Scanner input = new Scanner(System.in);
try {
fw = new FileWriter(file, true);
// 声明变量来接收用户输入
System.out.println("请输入要写入的内容:输入over结束");
String str = null;
// 声明缓冲区
char[] buf = new char[1024];
do {
str = input.nextLine(); // 接收用户输入
buf = str.toCharArray(); // 转换为数组
fw.write(buf, 0, buf.length);// 写入 } while (!(str.equals("over")));
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} // 读写文件
private static void input(File file) {
FileReader fr = null;
try {
fr = new FileReader(file);
// 定义字符数组
char[] buf = new char[1024];// 缓冲区大小
int len = 0;// 长度读取的字符个数
while ((len = fr.read(buf)) != -1) {
System.out.println(new String(buf, 0, len));
} } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
4.2、复制文件
package com.pb.io.demo1; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; /**
* 复制的原理 将一个文件存储到另一个文件中 边读边写 先读再写
*
*/
public class CopyFileDemo { public static void main(String[] args) {
File soure = new File("d:\\demo.txt");
File objFile = new File("e:\\q.txt");
copy1(soure, objFile);
copy2(soure, objFile);
}
/*
* 读一个复制一个
*/
public static void copy1(File soure, File objFile) {
FileReader fr = null;
FileWriter fw = null;
try {
// 声明读,写流对象
fr = new FileReader(soure);
fw = new FileWriter(objFile,true);
int ch = 0;
int count=0;
// 开始读
while ((ch = fr.read()) != -1) {
count++;
System.out.println("正在读取"+count+"行");
fw.write(ch);
fw.write("\r\n"); //换行
System.out.println("正在写入"+count+"行");
}
System.out.println("读写完成");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally { try {
if (fw != null)
fw.close(); } catch (IOException e) {
e.printStackTrace();
}
try {
if (fr != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
/*
* 数组方式读取复制
*/
public static void copy2(File soure, File objFile) {
FileReader fr = null;
FileWriter fw = null;
try {
// 声明读,写流对象
fr = new FileReader(soure);
fw = new FileWriter(objFile,true);
int ch = 0;
int count=0;
char [] buf=new char[1024];
// 开始读
while ((ch = fr.read(buf)) != -1) {
count++;
System.out.println("正在读取"+count+"行");
fw.write(buf,0,ch);
fw.write("\r\n"); //换行
System.out.println("正在写入"+count+"行");
}
System.out.println("读写完成");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally { try {
if (fw != null)
fw.close(); } catch (IOException e) {
e.printStackTrace();
}
try {
if (fr != null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
} } }

JAVA基础学习day19--IO流一、FileWrite与FileReader的更多相关文章
- 【java基础学习】IO流
IO流 字节流InputStream和OutputStream 字符流Writer和Reader 装饰模式
- Java基础之详谈IO流
Java基础知识.IO流详细讲解.你所要的IO这里都有
- Java基础教程:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- Java基础系列8——IO流超详细总结
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...
- java基础11(IO流)-字符流
转换流 由于字节流操作中文不是特别方便,所以java中提供了转换流 编码表:由现实世界的字符和对应的数值组成的一张表 编码:把看得懂的变成看不懂的(String-------byte[]) 解码:把看 ...
- java基础10(IO流)-字节流
IO流 输入与输出[参照物是程序] 如果从键盘.文件.网络甚至是另一个进程(程序或系统)将数据读入到程序或系统中,称为输入 如果是将程序或系统中的数据写到屏幕.硬件上的文件.网络上的另一端或者是一个进 ...
- Java基础12一IO流
1.IO流的原理 利用数据通道实现程序和数据源之间数据的的读写操作. 2.IO流分类 输入流.输出流.字节流.字符流.节点流.过滤流 3.InputStream 字节输入流 实现类FileInpu ...
- Java基础之(IO流)
简介: 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. 一.File ...
- java基础9(IO流)-File类
File类 File:文件和目录路径名的抽象表示形式.即java中把文件或者目录都封装成File对象 代码练习1 import java.io.File; public class FileDemo1 ...
- 【Java基础总结】IO流
字节流 1. InputStream 字节输入流 代码演示 InputStream in = System.in; System.out.println("int read(byte b) ...
随机推荐
- Android应用安全之Android APP通用型拒绝服务漏洞
0xr0ot和Xbalien交流所有可能导致应用拒绝服务的异常类型时,发现了一处通用的本地拒绝服务漏洞.该通用型本地拒绝服务可以造成大面积的app拒绝服务. 针对序列化对象而出现的拒绝服务主要是由于应 ...
- Knockout 新版应用开发教程之"text"绑定
目的 DOM元素显示文本的值是你传递的参数,前提是text先绑定到该元素上 典型的常用元素 <span>或者<em>习惯性的用来显示文本,但是在技术上来说你可以用任何元素的. ...
- (转)ubuntu安装opengl
$ sudo apt-get install build-essential 安装OpenGL Library接下来要把我们会用到的 Library 装上去,首先安装 OpenGL Library $ ...
- ruby -- 基础学习(三)设置中国时区时间
Rails连接MYSQL数据库,默认显示UTC时间.如果想要改成中国时区时间,按照下面修改: 在config/application.rb中找到 class Application < Rail ...
- DateTimePicker 控件的格式设置
DateTimePicker 控件的格式设置 CustomFormat属性设置 : yyyy-MM-dd HH:mm:ss 月大写M,分钟小写m,小时H代表24小时计算,h代表12小时计算yyyy- ...
- oc调用rest api
无需其他类库 1: - (IBAction)callapi:(id)sender { 2: NSURL *url=[NSURL URLWithString:@"http://..." ...
- Hadoop入门进阶课程11--Sqoop介绍、安装与操作
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博主为石山园,博客地址为 http://www.cnblogs.com/shishanyuan ...
- Java中基本数据类型的存储方式和相关内存的处理方式(java程序员必读经典)
1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...
- WCF回顾一、基本概念和应用场景
一.WCF描述 wcf是一款基于面向服务的架构的通讯框架平台,在分布式框架中得到了广泛使用. wcf入门非常简单,只要花几分钟就能编写一个完整的wcf程序,而实际上WCF是概念非常多的一门技术,需要花 ...
- [ORM] Entity Framework(2) CodeFirst进阶
在上一节中,实现了CodeFirst快速入门.但是很多与数据库的细节还无法自定义.以及使用EF过程中,需要注意的事项. 在本节中,会涉及到以下 EF中的连接字符串 EF的对象状态 延迟加载,为什么需要 ...