这两个类都可以读入数据到缓冲区,FileInputStream在传递到buffer的时候要用byte定义buffer,不然报错。比如:

byte [] buffer = new byte[100];

  而用FileReader传递数据到buffer的时候只能用char定义buffer,不然报错。

char [] buffer = new char[100]

  下面的代码可以把目录下的一个文件里的内容传到另一个文件:

//transfer a huge file using a fileinputstream
import java.io.*;
class Test
{
public static void main(String args[])
{
FileInputStream fis = null ; //要写在try外面,否则finally里无法找到fis和fos;并且一定要赋值null
FileOutputStream fos = null ;
try
{
fis = new FileInputStream("C:/from.txt");
fos = new FileOutputStream("C:/to.txt");
byte [] buffer = new byte[100];//数组的定义方法
while(true)
{
int temp = fis.read(buffer , 0 , buffer.length);//这句话一定要写在while里面,不然会生成一个巨大的txt
if(temp == -1)//read完了之后返回-1
{break ;}
fos.write(buffer, 0 , temp);
}
}
catch(Exception e)
{
System.out.println(e);
}
finally
{
try
{
fis.close();
fos.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
}

  

  用FileReader实现:

//transport a huge file using FileReader
import java.io.*;
class Test2
{
public static void main(String args[])
{
FileReader fr = null ;
FileWriter fw = null ;
try
{
fr = new FileReader("C:/from.txt");//此处不要忘了写参数
fw = new FileWriter("C:/to.txt");
char [] buffer = new char[100];//数组的定义方法
// int temp = fr.read(buffer, 0 , buffer.length);
// for(int i = 0 ; i < temp ; i++)
// System.out.println(buffer[i]);
while(true)
{
int temp = fr.read(buffer , 0 , buffer.length);//这句话一定要写在while里面,不然会生成一个巨大的txt
if(temp == -1)//read完了之后返回-1
{break ;}
fw.write(buffer, 0 , temp);
}
}
catch(Exception e)
{
System.out.println(e);
}
finally
{
try
{
fr.close();
fw.close();
}
catch(Exception e)
{
System.out.println(e);
}
}
}
}

需要注意的是用文件传递操作的时候一定要用到try..catch..finally,尤其要注意在finally里要再用一个try..catch语句调用close()语句把输入流和输出流关掉,否则FileReader甚至出现不工作的情况。

(END)

----------------Mar.5,2014更新-------------------------------

  今天想要用算法把txt中的文字加密,想要读取一整段的String。于是把while循环改了一下:

while (true) {
int temp = fr.read(buffer, 0, buffer.length);//temp返回的是长度。 这句话一定要写在while里面,不然会生成一个巨大的txt
if (temp == -1)// read完了之后返回-1
{
break;
}
contents = contents + String.valueOf(buffer);//char转成string
char [] cts = contents.toCharArray();//string转成char
fw.write(cts, 0, temp);
}

  注意如果再用FileWriter输出,将会得到ANSI编码的txt,所以如果原来的txt是Unicode编码或者其他编码,就会出现乱码。

FileInputStream和FileReader的更多相关文章

  1. java中OutputStream字节流与字符流InputStreamReader 每一种基本IO流BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWriter,FileInputStream,FileReader,FileWriter,InputStr

    BufferedOutputStream,FileInputStream,FileOutputStream,BufferedInputStream,BufferedReader,BufferedWri ...

  2. [转]Java FileInputStream与FileReader的区别

    在解释Java中FileInputStream和FileReader的具体区别之前,我想讲述一下Java中InputStream和Reader的根本差异,以及分别什么时候使用InputStream和R ...

  3. InputStream和Reader,FileInputStream和 FileReader的区别

    一.InputStream和Reader的区别 InputStream和Reader都可以用来读数据(从文件中读取数据或从Socket中读取数据),最主要的区别如下: InputStream用来读取二 ...

  4. FileInputStream、FileReader、FileWriter和File

    FileInputStream提供了对文件的字节读取 用于读取诸如图像数据之类的原始字节流       如:FileInputStream fis=new FileInputStream(new Fi ...

  5. Java FileInputStream与FileReader的区别

    在解释Java中FileInputStream和FileReader的具体区别之前,我想讲述一下Java中InputStream和Reader的根本差异,以及分别什么时候使用InputStream和R ...

  6. FileInputStream、FileReader、FileInputStream、FileWriter使用小结

    本文是基于Linux环境运行,读者阅读前需要具备一定Linux知识 InputStream包含如下三个方法: int read():从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转化为i ...

  7. java IO操作:FileInputStream,FileOutputStream,FileReader,FileWriter实例

    FileInputStream <span style="font-family:Verdana;">import java.io.File; import java. ...

  8. 节点流(文件流) FileInputStream & FileOutputStream & FileReader & FileWriter

    节点流(文件流) FileInputStream(字节流)处理视频类的                   FileOutputStream(字节流) FileReader(字符流)处理文本文件    ...

  9. FileReader采用的默认编码

    很久以前听教学视频,里面讲到Java采用的默认编码是ISO-8859-1,一直记着. 但是最近重新看IO流的时候,惊讶地发现,在不指定字符编码的情况下,FileReader居然可以读取内容为中文的文本 ...

随机推荐

  1. poj1149最大流经典构图神题

    题意:n个顾客依次来买猪,有n个猪房,每个顾客每次可以开若干个房子,买完时,店主可以调整这位顾客 开的猪房里的猪,共m个猪房,每个猪房有若干猪,求最多能卖多少猪. 构图思想:顾客有先后,每个人想要的猪 ...

  2. CodeForces - 813C The Tag Game(拉格朗日乘数法,限制条件求最值)

    [传送门]http://codeforces.com/problemset/problem/813/C [题意]给定整数a,b,c,s,求使得  xa yb zc值最大的实数 x,y,z , 其中x ...

  3. Callable和Runnable和FutureTask

    http://www.cnblogs.com/dolphin0520/p/3949310.html 一.Callable与Runnable 二.Future 三.FutureTask 四.使用示例 一 ...

  4. 存code

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> us ...

  5. spark学习(六)Java版RDD基本的基本操作

    1.map算子 private static void map() { //创建SparkConf SparkConf conf = new SparkConf() .setAppName(" ...

  6. 转:HtmlCxx用户手册

    1.1 简介 使用由KasperPeeters编写的强大的tree.h库文件,可以实现类似STL的DOM树遍历和导航. 打包好的Css解析器. 看似很像C++代码的C++代码(其实已不再是C++了) ...

  7. Jquery表单序列化和json操作

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. CentOS下常用的 19 条命令

    玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下 ...

  9. 微信小程序 - 提取字体图标与其优化

    微信小程序,无论是字体图标还是图标,都差不多,只不过是为了以后字体图标修改方便,或者加效果方便而使用它而已! 1. 下载font-awesome http://fontawesome.dashgame ...

  10. 【iOS】KVC 与 KVO

    一.KVC与KVO *"KVC":key value Coding(键值编码) *目的:间接的改动或获取对象的属性,减少程序(类与类)之间的耦合度. *"KVO" ...