一、输出字符流

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流技术(输出字符流/缓冲输出字符流)的更多相关文章

  1. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...

  2. java基础之IO流(一)字节流

    java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...

  3. Java基础之IO流整理

    Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...

  4. java基础篇---I/O技术

    java基础篇---I/O技术   对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...

  5. java基础篇---I/O技术(三)

    接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...

  6. java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理

    一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...

  7. java基础45 IO流技术(输入字符流/缓冲输入字符流)

    一.输入字符流 1.1.输入字符流体系 ------| Reader:输入字符流的基类(抽象类)  ----------| FileReader:向指定文件读取数据的输入字符流(把硬盘上的数据读取到程 ...

  8. Java基础:IO流之字节流和字符流

    1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...

  9. java基础53 IO流技术(转换流)

    1.转换流 1.输入字节的转换流:InputStreamReader是字节流转为字符流的桥梁,可以把输入字节流转换为输入字符流    2.输出字节流的转换流:OutputStreamWriter是字符 ...

随机推荐

  1. python模块之 paramiko

    paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. 1 基于用户名和密码的 sshclient 方式登录 # 建立一个s ...

  2. 【agc019C】Fountain Walk

    Portal --> agc019C Description 有一个\(10^8*10^8\)的网格图,一格距离为\(100\),第\(x\)条竖线和第\(y\)条横线的交点记为\((x,y)\ ...

  3. JavaWeb中的多数据源开发

    从我们接触Javaweb开始,ssh框架或者ssm等或许是惊叹于框架的强大之处还是自身的迷茫,一直没有注意到一个问题就是:在我的项目中在spring中所配置的数据源都是指向单一数据库,都是单数据源,一 ...

  4. 将SQL Server账户对应到Windows系统账户

    应用场景举例: SQL Server账户要访问外部资源,例如所拥有的Job要访问文件系统,而此文件系统需要Windows账户才有权限. 步骤: 1.       服务器新建凭据(Credentials ...

  5. JS--数组和字典

    一.JS数组 JavaScript中的数组类似于Python的列表 a = [11,22,33,44]  常见功能: obj.length 数组的大小 obj.push(ele) 尾部追加元素 obj ...

  6. python set() 集合的添加删除、交集、并集、差集、交叉补集、集合的方法介绍以及使用案例

    可变不可变: 1.可变:列表.字典.例如列表类型是可变的,我修改了列表中的元素的值,但是列表本身在内存中的地址是没有变化的,所以列表的元素是可以被改变的 >>> name=[&quo ...

  7. NATS_04:NATS协议详解

    NATS的协议是一个简单的.基于文本的发布/订阅风格的协议.客户端连接到 gnatsd(NATS服务器),并与 gnatsd 进行通信,通信基于普通的 TCP/IP 套接字,并定义了很小的操作集,换行 ...

  8. Linux操作系统常见安装方式

    Linux操作系统常见安装方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在window操作系统安装程序只需要点点鼠标就能搞定的事情,但是在Linux操作系统中,尤其是字符终端 ...

  9. openstack中的server

    一.HTTP server 主要是horizon模块,horizon是基于Python Django搭建的web应用,其运行于Apache网络服务器上(当然也可以运行在其他web服务器上),主要功能就 ...

  10. MacBook Air网络问题

    自从买了本本之后,一直觉得无线网连接不能正常使用,最开始觉得是网络不给力,因为图标都没有满格.后来搬家,网速家里的window,iphone设备都能正常使用,就我的mac 本本图标显示满格,但是网页打 ...