java基础46 IO流技术(输出字符流/缓冲输出字符流)
一、输出字符流
1.1、输出字符流体系
--------| Writer:输出字符流的基类(抽象类)
----------| FileWriter:向文件输出数据输出字符流(把程序中的数据写到硬盘中)
----------| BufferedWriter:缓冲输出字符流 缓冲输出字符流的作用:提高了FileWiter的写数据效率和拓展了FileWiter的功能。内部提供了一个8192长度的字符数组作为缓冲区而已,拓展了FileWiter。
注意:所有缓冲流都不具备读写文件的能力(比如BufferedWriter,他要借助FileWriter的写功能来写文件)
1.2 、FileWriter的步骤
1.找到目标文件
2.建立数据输出通道
3.写出数据(把程序中的数据写到硬盘中)
4.关闭资源
1.3、 FileWriter要注意的事项
1.FileWrite内部是维护了一个1024个字符的数组,使用FileWriter写数据的时候,会先写入到它内部维护的字符数组中,如果需要把数据真正的写到硬盘上,需要调用flush或者close方法或者填满内部的字符数组。
2.使用FileWrite的时候,如果目标文件不存在,那么会自动创建目标文件。
1.4、实例
package com.dhb.file; import java.io.File;
import java.io.FileWriter;
import java.io.IOException; /**
* @author DSHORE / 2018-7-6
*
*/
public class Demo15 {
public static void main(String[] args) throws IOException {
writeTest();
}
//输出字符流
public static void writeTest() throws IOException{
//找到目标文件
File file=new File("F:\\a.txt");
//建立数据输出通道
FileWriter fw=new FileWriter(file,true);//加个true,表示在原文件的原数据后面追加当前数据;不加true,则原来的数据全部被替换成现在追加的数据
//准备数据,把数据写出(即:写数据;把程序中的数据写到硬盘中)
String data="\r\n今天天气非常好,如果明天也好,我们就一起去锻炼吧!!!";// “\r\n”表示换行
fw.write(data);//字符流具备解码功能.
//刷新字符流
//fw.flush();
//关闭资源
fw.close();//其实close()里面有个flush()方法
}
}
运行结果图(运行两次的结果)
二、缓冲输出字符流
2.1、BufferedWriter注意事项
1.缓冲输出字符流的作用:提高了FileWiter的写数据效率和拓展了FileWiter的功能。内部提供了一个8192长度的字符数组作为缓冲区而已,拓展了FileWiter。
2.凡是缓冲流都不具备读写文件的能力
2.2、实例
package com.dhb.file; import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException; /**
* @author DSHORE / 2018-7-11
*
*/
public class Demo17 { public static void main(String[] args) throws IOException {
//找到目标文件
File file=new File("F:\\a.txt");
//建立数据输出通道
FileWriter fw=new FileWriter(file);
BufferedWriter bw=new BufferedWriter(fw);
//bw.newLine();//换行
bw.write("\r\n");//换行
//写出数据
bw.write("你若安好,便是晴天!");
//关闭资源
bw.close();
}
}
结果图:
附录1
package com.dhb.file; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; /**
* @author DSHORE / 2018-7-11
*
*/
/*
* 需求:将源目录拷贝到指定目录中
* */
//拷贝文件
public class DirCopy {
//源目录 , 目标文件
public void copy(File sourceDir,File targetFile){
//根据源目录名和目标目录构建一个新的目录对象
//这个是磁盘名(目标文件),源文件名
targetFile = new File(targetFile,sourceDir.getName());
//判断该目录是否存在,若不存在则创建
if(!targetFile.exists()){ //exists:存在
boolean b = targetFile.mkdirs(); //mkdirs:建立一个新的子目录
if(b)System.out.println("创建目录:"+targetFile.getAbsolutePath());//输出已创建目录(文件夹)的绝对路径
}
//获取源目录中的所有子文件(或子目录)
File[] files = sourceDir.listFiles();
if(files != null){
for (int i = ; i < files.length; i++) {
//判断当前File对象是文件还是目录
if(files[i].isDirectory()){//判断是文件
//如果是目录,则递归调用
copy(files[i],targetFile);//重新调用copy()方法,在遍历目录里面的文件
}else{
//如果是标准文件则进行文件拷贝
copyFile(files[i],targetFile);
}
}
}
}
//实现标准文件的拷贝 原文件 目标文件
private void copyFile(File source, File target) {
//根据要拷贝的文件名和目录构建新的文件
target = new File(target, source.getName()); BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//获取源文件的输入流
bis = new BufferedInputStream(new FileInputStream(source));//作用于:读
//获取目标文件的输出流
bos = new BufferedOutputStream(new FileOutputStream(target));//作用于:写
byte[] b = new byte[];
int length=;
System.out.println("开始拷贝:"+source.getAbsolutePath()+"---------->"+target.getAbsolutePath());
while((length = bis.read(b)) != -){//读
bos.write(b, , length);//写
bos.flush();
}
System.out.println("拷贝完成:"+source.getAbsolutePath()+"---------->"+target.getAbsolutePath());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
bos.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} public static void main(String[] args) {
// 要拷贝的文件(原文件) ,要拷贝到那个盘符下(目标文件)
new DirCopy().copy(new File("F:\\MyJavaCode"),new File("E:\\"));
}
}
运行结果图:
附录2
package com.dhb.file; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner; /**
* @author DSHORE / 2018-7-11
*
*/
/*
* 需求:请使用缓冲输入输出字符流实现用户的登录注册功能.....
* 张三 123
* 李四 456
*
* */
public class Demo18 {
static Scanner sc=new Scanner(System.in);
public static void main(String[] args) throws IOException {
while(true){
System.out.println("请选择功能: A(注册) B(登录)");
String option=sc.next();
if("a".equalsIgnoreCase(option)){
//注册
reg();
}else if("b".equalsIgnoreCase(option)){
//登录
login(); }else{
System.out.println("输入有误,请从新输入.....");
}
}
}
//登录
private static void login() throws IOException {
System.out.println("请输入用户名");
String userName = sc.next();
System.out.println("请输入密码");
String passWord = sc.next();
String info = userName+" "+passWord;
//读取文件信息是否存在该用户,如果有则登录成功
//建立数据的输入通道
//缓冲输入字符流
BufferedReader br = new BufferedReader(new FileReader(new File("F:\\a.txt")));
boolean isLogin = false;
String line = null;
while((line = br.readLine())!=null){ //readLine:一行一行的读取
if(info.equals(line)){
isLogin=true;
break;
}
}
if(isLogin){
System.out.println("登录成功!欢迎"+userName);
}else {
System.out.println("用户或密码错误!如未注册,请先注册再登录");
}
}
//注册
private static void reg() throws IOException {
System.out.println("请输入用户名");
String userName = sc.next();
System.out.println("请输入密码");
String passWord = sc.next();
String info = userName+" "+passWord;
//把用户信息写到文件上
File file = new File("F:\\a.txt");
//建立通道
FileWriter fw = new FileWriter(file,true);
//建立缓冲输出字符流
BufferedWriter bw = new BufferedWriter(fw);
//把用户信息写出
bw.write(info);
bw.newLine();//换行
//关闭资源
bw.close();
}
}
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/9274643.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
java基础46 IO流技术(输出字符流/缓冲输出字符流)的更多相关文章
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- java基础之IO流(一)字节流
java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...
- Java基础之IO流整理
Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...
- java基础篇---I/O技术
java基础篇---I/O技术 对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...
- java基础篇---I/O技术(三)
接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...
- java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理
一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...
- java基础45 IO流技术(输入字符流/缓冲输入字符流)
一.输入字符流 1.1.输入字符流体系 ------| Reader:输入字符流的基类(抽象类) ----------| FileReader:向指定文件读取数据的输入字符流(把硬盘上的数据读取到程 ...
- Java基础:IO流之字节流和字符流
1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...
- java基础53 IO流技术(转换流)
1.转换流 1.输入字节的转换流:InputStreamReader是字节流转为字符流的桥梁,可以把输入字节流转换为输入字符流 2.输出字节流的转换流:OutputStreamWriter是字符 ...
随机推荐
- 洛谷 P1341 无序字母对 解题报告
P1341 无序字母对 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 ...
- 如何获取codeforces的完整数据?(玄学方法)
做cf题总是wa,wa了以后还没发看完整数据,好气哦! 怎么办? 这其实非常简单 首先看一下wa的那个数据有什么特点 比如说n = 1111,m = 1111 那么就if(n == 1111 & ...
- mysql 统计 group by 之后的 group 的个数
如果将 count(*) 和 group by 一起使用,count(*) 统计的将会是每个 group 里面的行数,而不是 group 的个数. 如果你想统计 group 的个数,需要将 group ...
- UDP ------ UDP 详解
原文地址:https://zhuanlan.zhihu.com/p/25622691 3. UDP疑难杂症 3.1 UDP的传输方式:面向报文 面向报文的传输方式决定了UDP的数据发送方式是一份一份的 ...
- Tomcat性能调优及JVM内存工作原理
Java性能优化方向:代码运算性能.内存回收.应用配置. 注:影响Java程序主要原因是垃圾回收,下面会重点介绍这方面 代码层优化:避免过多循环嵌套.调用和复杂逻辑.Tomcat调优主要内容如下:1. ...
- redis 新开端口号
2012 ps aux | grep redis 2013 cd /usr/local/redis/ 2014 ls 2015 cd etc/ 2016 ls 2017 cp redis.conf r ...
- 跨域问题 Uncaught DOMException: Blocked a frame with origin。。。
第三方系统内嵌 到iframe中的 跨域问题. 解决方案: http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html
- bzoj千题计划152:bzoj3405: [Usaco2009 Open]Grazing2 移动牛棚
http://www.lydsy.com/JudgeOnline/problem.php?id=3405 n个牛棚,n-1段 因为要求距离尽量大,而且尽可能多的为d 所以: 第1个牛棚一定在位置1 最 ...
- 洛谷 p2530 化工场装箱员(资源型)
化工场装箱员 https://www.luogu.org/problem/show?pid=2530 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的 ...
- Java 避免精度丢失之BigDecimal 运算
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精确的浮点数运算,包括加减乘除和四舍五入 import java.math.BigDecimal; /** 计算工具类 */ pu ...