10.6-全栈Java笔记:常见流详解(四)

上节我们讲到「Java中常用流:数据流和对象流」,本节我们学习文件字符流和文件缓冲流~

文件字符流

前面介绍的文件字节流可以处理所有的文件,但是字节流不能很好的处理Unicode字符,经常会出现“乱码”现象。所以,我们处理文本文件,一般可以使用文件字符流,它以字符为单位进行操作。

【示例1】使用FileReaderFileWriter实现文本文件的copy


package com.bjsxt.io;

import java.io.*;

/**

* 测试文件字符流

@author 尚学

*

*/

public class Demo07 {

public static void main(String[] args) {

//写法和使用stream基本一样。只不过,读取时是读取的字符。

FileReader fr = null;

FileWriter fw = null;

int c = 0;

try {

fr = new FileReader("d:/a.txt");

fw = new FileWriter("d:/d.txt");

while((c=fr.read())!=-1){

fw.write(c);

}

}   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();

}

}

}

}

字符缓冲流

BufferReader/BufferWriter增加了缓存机制,大大提高了读写文本的效率,同时,提供了方便的按行读的方法:readLine();  处理文本时,我们一般可以使用字符缓冲流。

【示例2】使用BufferReaderBufferWriter实现文本文件的复制


import java.io.*;

public class Demo08 {

public static void main(String[] args) {

// 注:处理文本文件时,实际开发中可以用如下写法,简单高效!!

FileReader fr = null;

FileWriter fw = null;

BufferedReader br = null;

BufferedWriter bw = null;

String tempString = "";

try {

fr = new FileReader("d:/a.txt");

fw = new FileWriter("d:/d.txt");

br = new BufferedReader(fr);

bw = new BufferedWriter(fw);

while ((tempString = br.readLine()) != null) {

bw.write(tempString);

}

catch (FileNotFoundException e) {

e.printStackTrace();

catch (IOException e) {

e.printStackTrace();

finally {

try {

if(bw!=null){

bw.close();

}

catch (IOException e1) {

e1.printStackTrace();

}

try {

if(br!=null){

br.close();

}

catch (IOException e1) {

e1.printStackTrace();

}

try {

if(fw!=null){

fw.close();

}

catch (IOException e) {

e.printStackTrace();

}

try {

if(fr!=null){

fr.close();

}

catch (IOException e) {

e.printStackTrace();

}

}

}

}

到本章节为止,我们已经学习了大部分的常见流,下节我们学习常见流的最后一篇~~



「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

  笔记包含从浅入深的六大部分:

A-Java入门阶段

B-数据库从入门到精通

C-手刃移动前端和Web前端

D-J2EE从了解到实战

E-Java高级框架精解

F-Linux和Hadoop

时间: 2024-10-03 04:23:06

10.6-全栈Java笔记:常见流详解(四)的相关文章

10.7-全栈Java笔记:常见流详解(五)

本节我们学习「常见流中的最后两项:转换流和随意访问文件流」~ 转换流 InputStreamReader/OutputStreamWriter用来实现将字节流转化成字符流.比如,如下场景: System.in是字节流对象, new BufferedReader(须接受Reader对象).我们就能将System.in转换成Reader对象,即可完成此场景. [示例1]使用InputStreamReader接受用户的输入 BufferedReader bReader= null; try { Sys

10.5-全栈Java笔记:常见流详解(三)

上节我们讲到「Java中常用流:缓冲流」,本节我们学习数据流和对象流~ 数据流 数据流将"基本数据类型变量"作为数据源,从而允许程序以与机器无关方式从底层输入输出流中操作java基本数据类型. DataInputStream和DataOutputStream提供了可以存取与机器无关的所有Java基础类型数据(如:int,double 等)的方法. [示例1]DataInputStream和DataOutputStream的使用 package com.bjsxt.io; import 

10.3-全栈Java笔记:常用流详解(一)

 文件字节流 FileInputStream通过字节的方式读取文件,适合读取所有类型文件(图像.视频.文本文件等).Java也提供了FileReader专门读取文本文件. FileOutputStream 通过字节的方式写数据到文件,适合所有类型文件.Java也提供了FileWriter专门写入文本文件. [示例1]将文件内容读取到程序中.  import java.io.*; public class Demo02 { public static void main(String[] args

10.4-全栈Java笔记:常用流详解(二)

上节我们讲到「Java中常用流:文件字节流和字节数组流」,本节我们继续走起~  缓冲流 BufferedInputStream和BufferedOutputStream这两个流是处理流,通过内部缓存数组来提高操作流的效率. [示例1]使用缓冲流实现文件的高效率复制操作 public class Demo06 { public static void main(String[] args) { new Demo06().copyFile("d:/a.txt", "d:/b.tx

Java笔记:字符串详解

更新时间:2018-1-6 21:20:39 更多请查看在线文集:http://android.52fhy.com/java/index.html String 字符串创建 String str1="ABC";//推荐使用 String str2 = new String("ABC"); 第一种更省空间.对于字符串比较,如果直接使用==是判断地址是否相同,判断值是否相同需要使用String.equals()方法. 对于字符串:其对象的引用都是存储在栈中的,如果是编译

Python全栈之路--Django ORM详解

ORM:(在django中,根据代码中的类自动生成数据库的表也叫--code first) ORM:Object Relational Mapping(关系对象映射) 我们写的类表示数据库中的表 我们根据这个类创建的对象是数据库表里的一行数据 obj.id  obj.name.....就是数据库一行数据中的一部分数据 ORM--First: 我们在学习django中的orm的时候,我们可以把一对多,多对多,分为正向和反向查找两种方式. class UserType(models.Model):

2018-06-20-Python全栈开发day19-生成器函数详解

1.生成器函数 生成器函数,和普通函数的区别就是, 1.在生成器函数中使用yield代替return,而且yield可以被调用多次 2.当函数运行到yield时,会保留yield当前状态,等待下一次next 用法示例: def test(): yield 1 yield 2 yield 3 a=test() b=a.__next__() c=a.__next__() d=a.__next__() # print(b) print(c) print(d) test函数中,有三个yield,每使用一

10.2-全栈Java笔记:最全面的IO技术(二)

上节我们聊到「IO技术概念及入门」这节我们继续聊一下IO技术的分类. Java中流的概念细分 按流的方向分类: 输入流:数据流向是数据源到程序(InputStream.Reader结尾的流) 输出流:数据流向是程序到目的地(OutPutStream.Writer结尾的流) 按处理的数据单元: 字节流:按照字节读取数据(InputStream.OutputStream)命名上以stream结尾的流一般是字节流. 字符流:按照字符读取数据(Reader.Writer).命名上以Reader/Writ

10.1-全栈Java笔记:最全面的IO技术(一)

IO技术 对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的功能.程序运行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件.数据库.其他程序.网络.IO设备等等. 外部系统比较复杂多变,那么我们有必要通过某种手段进行抽象.屏蔽外部的差异,从而实现更加便捷的编程. 输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是"读",读取外部数据).常见的应用: 1) 读取硬盘上的文件内容到程序.例如:播放器打开一个视频文件.word打