FileWriter类的构造方法定义如下:

1.public FileWriter(File file)throws IOException

字符流的操作比字节流操作好在一点,就是可以直接输出字符串了,不用再像之前那样进行转换操作了。

package com.lp.ecjtu;

import java.io.FileWriter;
import java.io.IOException; public class FileWriterDemo { /**
* 字符流,创建一个FileWriter对象,该对象一被初始化,就必须明确操作的文件,将
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//而且该文件被创建到指定目录下,如果该目录下面已经有同名的文件,将被覆盖
FileWriter fw = new FileWriter("Demo.txt");
//调用write方法,将字符串写入到流当中去,也就是缓冲区中
fw.write("abcefg");
//刷新流对象中的缓冲中的数据
//将数据刷到指定的文件当中去
fw.flush();
//fw.close();//如果用close,则流关闭,后面的写入流将不会被执行
fw.write("3423");
fw.flush();
} }

输出结果:

在Demo.txt文件中写入了:abcefg3423

2.public FileWriter(File file,boolean append)throws IOException 用FileWriter的另一种构造方法,传递一个true参数,代表不覆盖已有的文件。并在已有文件进行续写
package com.lp.ecjtu;

import java.io.FileWriter;
import java.io.IOException; /**
* 对已有文件的续写
* @author Administrator
*
*/
public class FileWriterDemoApend { /**
* 创建一个FileWriter对象,该对象一被初始化,就必须明确操作的文件
* @param args
* @throws IOException
* @throws IOException
*/
public static void main(String[] args){
FileWriter fw = null;
try{
//用FileWriter的另一种构造方法,传递一个true参数,代表不覆盖已有的文件。并在已有文件进行续写
fw = new FileWriter("Demo.txt",true);
//调用write方法,将字符串写入到流当中去,也就是缓冲区中
fw.write("234334\r\n谢谢"); }catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(fw != null){
fw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

输出结果:在文件中续写字符串:

结果变为

abcefg3423234334

谢谢

FileReader的构造方法定义如下:

public FileReader(File file)throws FileNotFoundException

FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader

 

例子:一个字符一个字符读取文件:

package com.lp.ecjtu;

import java.io.FileReader;
import java.io.IOException; public class FileReaderDemo { /**
* 怎样去捕获IO异常,标准的捕获异常方式
* 下面的1,2,3都会抛出异常,可能发生的异常有下面三个:
* 1.java.io.FileNotFoundException //关联的文件不存在
* 2.java.lang.NullPointerException //FileReader可能没有new
* 3.IOException //操作IO流的时候抛出的异常
*/
public static void main(String[] args) {
//创建一个文件读取流对象,和指定的名称的文件相关联
//要保证该文件是已经存在的,如果不存在,会发生FileNotFoundException
FileReader fr = null;
try {
fr = new FileReader("Demo.txt"); //一次读取一个字符,而且会自动往下读
/* int char1 = fr.read();
System.out.println("char1="+(char)char1);//char1=a
int char2 = fr.read();
System.out.println("char2="+(char)char2);//char2=b
int char3 = fr.read();
System.out.println("char3="+(char)char3);//char3=c
int char4 = fr.read();
System.out.println("char4="+(char)char4);//char4=e
int char5 = fr.read();
System.out.println("char5="+(char)char5);
int char6 = fr.read();
System.out.println("char6="+(char)char6);
int char7 = fr.read();
System.out.println("char7="+char7);*/
//如果达到流的末尾,则返回-1,-1为数据的分割符
int ch = 0;
while((ch=fr.read())!= -1){
System.out.print((char)ch);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fr != null){
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
} }

输出结果:

abcefg3423234334
谢谢

以字符数组的形式读取:

使用:

public int read(char[] cbuf)
throws IOException
package com.lp.ecjtu;

import java.io.FileReader;
import java.io.IOException; public class FileReaderDemo2 { /**
* @param args
*/
public static void main(String[] args) throws IOException{
//创建一个文件读取流对象,和指定的名称的文件相关联
//要保证该文件是已经存在的,如果不存在,会发生FileNotFoundException
FileReader fr = new FileReader("Demo2.txt"); //定义一个字符数组,用于存储读到的字符
//char[] ch = new char[1024];
//返回读到的字符个数
//每次读3字符个放到字符数组缓冲区当中,一次性存储3个放到数组当中,然后在一次性读取出来
char[] ch = new char[3];
int num = fr.read(ch);
System.out.println("num="+num+"----"+new String(ch));
int num1 = fr.read(ch);
System.out.println("num1="+num1+"----"+new String(ch));
int num2 = fr.read(ch);
System.out.println("num2="+num2+"----"+new String(ch));
int num3 = fr.read(ch);
System.out.println("num3="+num3+"----"+new String(ch)); int nu = 0;
while((nu=fr.read(ch)) !=-1){
System.out.println(new String(ch,0,nu));
} fr.close();
} }

输出:demo2中存储的字符为:abcdefg

num=3----abc
num1=3----def
num2=1----gef
num3=-1----gef

以字符数组的的形式循环读取java文件

package com.lp.ecjtu;

import java.io.FileReader;
import java.io.IOException; public class FileReaderJava { /**
* @param args
* 读取一个java文件,并且打印到控制台上
*/
public static void main(String[] args) throws IOException{
//创建一个文件读取流对象,和指定的名称的文件相关联
//要保证该文件是已经存在的,如果不存在,会发生FileNotFoundException
FileReader fr = new FileReader("FileReaderDemo.java"); //定义一个字符数组,用于存储读到的字符
char[] ch = new char[1024];
//返回读到的字符个数
int num= 0;
while((num=fr.read(ch)) !=-1){
System.out.print(new String(ch,0,num));
} fr.close();
} }

文件的复制:将一个盘的文件复制到另一个盘:

package com.lp.ecjtu;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class CopyTest { /**将C盘一个文本文件复制到D盘
* @param args
* 原理:其实就是将C盘下的文件数据存储到D盘的文件当中
* 步骤:
* 1.在D盘创建一个文件,用于存储C盘文件的数据
* 2.定义读取流和C盘文件相关联
* 3.通过不断的读写完成数据的存储
* 4.关闭资源
* @throws IOException
*/ public static void copy1() throws IOException{
//创建要写出到哪个文件,也就是目的地:为硬盘文件
FileWriter fw = new FileWriter("testjava.txt");
//与要拷贝的文件关联,也就是读取要拷贝的文件 源:为硬盘文件
FileReader fr = new FileReader("FileReaderDemo.java");
int ch=0;
//从c盘 读一个,就往D盘复制一个
while((ch = fr.read())!= -1){
fw.write(ch);
}
fw.close();
fr.close();
}
/**
* 写入数组缓存中,一次读出,一次性写入
* @param args
* @throws IOException
*/
public static void copy2(){
FileWriter fw = null;
FileReader fr = null; try {
fw = new FileWriter("test2.txt");
fr = new FileReader("FileReaderDemo.java");
char[] buf = new char[1024];
int len = 0;//表示buf数组的长度
while((len = fr.read(buf))!=-1){
fw.write(buf,0,len);
System.out.println(buf);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fw != null){
fw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(fr != null){
fr.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
public static void main(String[] args) throws IOException {
copy1();
copy2();
} }

总结:copy1的效率低于copy2,因为copy2一次性把数组复制到数组缓冲区,然后在写入流中。

 

java基础知识回顾之javaIO类---FileWriter和FileReader的更多相关文章

  1. java基础知识回顾之javaIO类总结

    java IO体系图 IO流的操作规律总结: 1,明确体系: 数据源:InputStream ,Reader 数据汇:OutputStream,Writer 2,明确数据:因为数据分两种:字节,字符. ...

  2. java基础知识回顾之javaIO类---InputStreamReader和OutputStreamWriter转化流

    InputStreamReader:是字节流通向字符流的桥梁: OutputStreamWriter 是字符流通向字节流的桥梁: package com.lp.ecjtu; import java.i ...

  3. java基础知识回顾之javaIO类---BufferedReader和BufferedWriter

    使用了装饰设计模式:此类的设计是为了提高流操作数据的效率.思想就是定义容器将数据进行临时存储,对于缓冲区对象,其实就是将这个容器进行了分装,并提供了更高效的操作方法. BufferReader: pa ...

  4. java基础知识回顾之javaIO类--RandomAccessFile类

    java.io 类 RandomAccessFile java.lang.Object java.io.RandomAccessFile1.该类不是IO流中的子类.2.该类既能读又能写.3.该对象内部 ...

  5. java基础知识回顾之javaIO类--java序列化和反序列化

    /** *  * 一:理解序列化反序列化及其应用 * 序列化:把堆内存的对象转化成字节流的过程. * 反序列化:把字节流序列恢复重构成对象的过程. * 对象的序列化的用途:1.把对象的字节序列持久化, ...

  6. java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

    /** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件 ...

  7. java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter

    FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFi ...

  8. java基础知识回顾之javaIO类--File类

    File类是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包括文件名,文件长度,最后修改日期,是否可读, ...

  9. java基础知识回顾之javaIO类---BufferedInputStream和BufferedOutputStream

    MP3的复制过程: package com.lp.ecjtu; import java.io.BufferedInputStream; import java.io.BufferedOutputStr ...

随机推荐

  1. Linux--变量与虚拟内存

    定义一个变量:存储类型  数据类型  变量名 存储类型(变量存储的位置):auto.register.static.extern 1.auto:对于局部变量,atuo可以缺省.位置:栈 2.exter ...

  2. js设计模式(4)---组合模式

    0.前言 今天是建党节,新疆那边又开始了闹腾.作为立志成为码农的我,现在已经从一个大愤青淡化为一个小愤青,对这些国家民生大事不在血气喷发,转而把经历发泄在技术问题上面,因而在扯一篇随笔吧,把无处发泄的 ...

  3. yum最常用的命令

    yum是一个用于管理rpm包的后台程序,用python写成,可以非常方便的解决rpm的依赖关系.在建立好yum服务器后,yum客户端可以通过 http.ftp方式获得软件包,并使用方便的命令直接管理. ...

  4. dedecms 处理分页样式及去掉分页li

    最近装了个织梦dedecmsV5.7版本时,调用分页显示出现的结果出现好几行,怎么也不能在一排显示,找了很多资料,才了解到是由织梦模板中分页加了<Li>列表标签,解决有两种方法,下面将一一 ...

  5. Win7开始菜单之【附件】不全解决方案

    Win7开始菜单之[附件]不全解决方案 1:打开你的[开始]菜单,转到附件,如果你发现你的附件里的“附件”不是那么全的话,如下图:来吧,我告诉你如何恢复它到最初的模样……哦,或许如果你不急于恢复的话, ...

  6. linux学习之进程,线程和程序

                                                                                      程序.进程和线程的概念 1:程序和进 ...

  7. JDBC ----常用数据库的驱动程序及JDBC URL:

    常用数据库的驱动程序及JDBC URL: Oracle数据库: 驱动程序包名:ojdbc14.jar  驱动类的名字:oracle.jdbc.driver.OracleDriver  JDBC URL ...

  8. oracle中的loop与while循环

    Oracle中loop语句会先执行一次循环,然后再判断“exit when”关键字后面的条件表达式的值是true还是false,如果是true,那么将退出循环,否则继续循环. LOOP循环 语法如下l ...

  9. Java中构造函数执行顺序的问题

    1,  先执行内部静态对象的构造函数,如果有多个按定义的先后顺序执行:而且静态类的构造函数只会被执行一次,只在其第一个对象创建时调用,即便是创建了同一个类的多个对象,例如main()函数里b1,b2创 ...

  10. google api , using a refresh token to get the access token

    router.get('/refresh',function(req,res){ oauth2Client.credentials = { refresh_token: '1/RqVyL7yLBxws ...