一,文件输入流和文件输出流:FileInputStream,FileOutputStream
FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节。在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色。

int read();int read(byte b[]);int read(byte b[],int off,int len);

使用方法:以文件作为数据输入源的数据流。或者说是打开文件,从文件读数据到内存的类。

//构造函数
FileInputStream(String name);
FileInputStream(File file);
//使用方法(1)
File f=new File("d:/a.txt");
FileInputStream in=new FileInputStream( f);
//使用方法(2)
FileInputStream in=new FileInputStream("d:/a.txt");

程序举例:

import java.io.IOException;
import java.io.FileInputStream;
;
public class TestFile { public static void main(String args[]) throws IOException { try{     FileInputStream rf=new   FileInputStream("d:/a.txt"); int n=512;   byte  buffer[]=new  byte[n];    while((rf.read(buffer,0,n)!=-1)&&(n>0)){ //把文件内容读到这个缓存数组里边去,缓存数组其实就是内存System.out.println(new String(buffer) ); } System.out.println(); rf.close(); } catch(IOException  IOe){       System.out.println(IOe.toString()); } }
} 

FileOutputStream类用来处理以文件作为数据输出目的数据流;或者说是从内存区读数据入文件,FileOutputStream类用来处理以文件作为数据输出目的数据流;一个表示文件名的字符串

//方法
void write(byte b[]);void write(byte b[],int off,int len);
//构造函数
FileOutputStream(String name);
FileOutputStream(File file);
//使用方法(1)
File f=new File("d:/a.txt");
FileOutputStream in=new FileOutputStream( f);
//使用方法(2)
FileOutputStream in=new FileOutputStream("d:/a.txt");

程序举例:
import java.io.*;

import java.io.*;
public class test {public static void main(String args[]) {byte [] b="你想在还在武汉吗?".getBytes();try{  FileOutputStream out=new FileOutputStream("hello.txt");out.write(b);out.write(b,0,b.length); //把字符串写到文件里面}catch(IOException e) {System.out.println("Error "+e);}}
}

例子:把一个文件拷贝到另一个文件中

import java.io.File;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
public class test{ public static void main(String args[]) throws IOException { try { File fromFile = new File("a.txt"); File toFile = new File("b.txt"); FileInputStream formS = new FileInputStream(fromFile); //文件输入流FileOutputStream toS = new FileOutputStream(toFile); //文件输出流int c; while ((c = formS.read()) != -1) { toS.write(c); //从a中读到后就写到b中去} finS.close(); foutS.close(); } catch (IOException e) { System.err.println("FileStreamsTest: " + e); } }
} 

二,文件字符流:FileReader,FileWriter
文件字节流的read个write方法使用字节读写操作,即以字节为基本单位处理数据,但是字节流不能很好的操作Unicode字符,比如一个汉字占用两个字节。
与FileInputStream,FileOutputStream对应的是FileReader和Filewriter字符流,分别是Reader和Writer的子类。

//FileReader
FileReader(String filename);
FileReader(File file);
//方法
int read();
int read(byte b[]);
int read(byte b[],int off,int len);
//FileWriter
FileWriter(String filename);
FileWriter(File file);
//方法
void write(byte b[]);
void write(byte b[],int off,int len);

程序举例:

import java.io.*;
public class test {public static void main(String args[]) {char a[]="这是文件字符流".toCharArray();   int n=0,m=0;try{  File f=new File("secret.txt");for(int i=0;i<a.length;i++) {a[i]=(char)(a[i]^'R');//对数组a进行加密}FileWriter out=new FileWriter(f);out.write(a,0,a.length);//向文件f中写加密的数组aout.close();FileReader in=new FileReader(f);char tom[]=new char[10];System.out.println("密文:");while((n=in.read(tom,0,10))!=-1) {//从文件f中读出已经加密的a到数组tom中再输出String s=new String (tom,0,n);System.out.print(s);}in.close();System.out.printf("\n解密:\n"); in=new FileReader(f);while((n=in.read(tom,0,10))!=-1) { for(int i=0;i<n;i++) {tom[i]=(char)(tom[i]^'R');//对数组tom解密}String s=new String (tom,0,n);System.out.print(s);//输出}in.close();}catch(IOException e) {System.out.println(e.toString());}}
}

Java文件字节流和字符流FileInputStream,FileOutputStream,FileReader,FileWriter相关推荐

  1. Java IO 字节流、字符流详解

    1. 字节流与字符流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接.类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流 ...

  2. Java IO 字节流与字符流 (三)

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

  3. java.IO字节流和字符流详解

    IO流的分类 在学习字节流和字符流之前因该先学习IO流的分类,效果会更好 有多种分类方式: 一种方式是按照流的方向进行分类: 以内存作为参照物, 往内存中去,叫做输入(Input).或者叫做读(Rea ...

  4. Java中字节流和字符流的比较(转)

    字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操 ...

  5. 四十、Java中字节流和字符流介绍和区别

    @Author:Runsen @Date:2020/6/6 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  6. 【转】文本文件和二进制文件区别及java中字节流和字符流归纳

    首先在物理上文本文件和二进制文件并没有区别,都是以二进制01的形式存放于存储介质中,他们的区别只是逻辑上的区别,这两种方式只是在编码层次上有差别.文本文件是基于字符编码的文件,常见的编码有ASCII编 ...

  7. Java测试字节流和字符流,以及带缓存的字符流读取速度对比

    测试用的文件为txt格式文件,大小为2.12MB package IO;import java.io.BufferedReader; import java.io.File; import java. ...

  8. Java的字节流和字符流

    InputStream用法 package io;import java.io.ByteArrayInputStream; import java.io.FileInputStream; import ...

  9. java字节流转字符串_字节流与字符流的区别及相互转换

    先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输出都是以流的形 ...

最新文章

  1. python文件句柄_Python文件操作
  2. 计算机组成微程序设计,计算机组成原理微程序设计.doc
  3. word 通配符_word通配符技巧:HR高效办公技巧应用
  4. HTTP 三次握手  建立连接 和  四次握手断开连接
  5. mysql修改密码后无法启动_mysql服务无法启动与强制修改密码指南-Go语言中文社区...
  6. cisco router修改mac
  7. iOS开发中通知(Notification)快速入门及推送通知实现教程
  8. 计算机网络之网络安全基础-网络安全概述
  9. 软件测试计划的主要内容
  10. C.Lorenzo Von Matterhorn(思维+朴素lca思想)
  11. Ubuntu 如何安装 微信?实测
  12. Graham Scan算法
  13. 软键盘实例 request参数修改
  14. 国外服务器和国内服务器 不同时区的问题
  15. 每日刷题记录 (六)
  16. 学习-Java继承和多态之子类继承性
  17. equals()的理解
  18. 大学计算机专业的竞赛,大学计算机专业竞赛大全.ppt
  19. C# .CS后台调用JS函数
  20. 关于Notepad++正则表达式匹配查找以xx开头以xx结尾包含特殊符号需转义的处理方法

热门文章

  1. stm32 Bootloader设计(YModem协议)
  2. framebuffer 保存 bmp图片格式
  3. Qt 进程 QProcess
  4. 数据挖掘 —— 模型评估
  5. 石墨烯区块链(4)API
  6. C++(六)——继承
  7. 近世代数--整环上的唯一分解问题--唯一分解整环中元素的标准分解式
  8. 近世代数--置换群--判断置换的奇偶性
  9. 【Flask项目2】生成token和验证token(11)
  10. 【Flask】ORM的关联关系