一、输出字符流

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. Typhoon-v1.02 靶机入侵

      0x01 前言 Typhoon VM包含多个漏洞和配置错误.Typhoon可用于测试网络服务中的漏洞,配置错误,易受攻击的Web应用程序,密码破解攻击,权限提升攻击,后期利用步骤,信息收集和DNS ...

  2. Android打包 & Gradle用法

    Ref: Maven仓库上查插件最新版本号The Central Repository Search Enginehttp://search.maven.org/#search%7Cga%7C1%7C ...

  3. svn提交失败 :“svn: E200007: Commit failed”

    引言: 在切换subversion服务器地址之后,发生的无法正确提交代码的问题org.apache.subversion.javahl.ClientException: svn: E200007: C ...

  4. 题解【bzoj4587 & bzoj4408 [FJOI2016]神秘数】

    Description \(n\) 个数的序列,每次询问一个区间,求最小的一个数使得不能用这个区间中的数之和表示. \(n \leq 10^5, \sum a_i \leq 10^9\) 这两个题一个 ...

  5. NO.7day系统监控,硬盘分区和文件系统管理

    系统监控,硬盘分区和文件系统管理 1.系统监控 top命令:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.默认每5秒刷新屏幕数 ...

  6. python 中的os模块

    python os模块   Python os 模块提供了一个统一的操作系统接口函数 一.对于系统的操作 1.os.name 当前使用平台 其中 ‘nt’ 是 windows,’posix’ 是lin ...

  7. 页面缓存之Meta http-equiv属性详解

    http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...

  8. webapi框架搭建-数据访问ef code first

    webapi框架搭建系列博客 为什么用ef? 我相信很多博友和我一样都有这种“选择困难症”,我曾经有,现在也有,这是技术人的一个通病——总想用“更完美”的方式去实现,导致在技术选择上犹豫不决,或总是推 ...

  9. 贪心问题:区间覆盖 NYOJ 喷水装置(二)

    喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水 ...

  10. 【转载】 深度学习与自然语言处理(1)_斯坦福cs224d Lecture 1

    版权声明:本文为博主原创文章,未经博主允许不得转载. 原文地址http://blog.csdn.net/longxinchen_ml/article/details/51567960  目录(?)[- ...