java的文件流:字节流(FileInputStream、FileOutputStream)和字符流(FileReader、FileWriter)。
java的输入输出建立在4个抽象类的基础上:InputStream、OutputStream、Reader、Writer。InputSream和OutputStream被设计成字节流类,而Reader和Writer被设计成字符流类。一般来说,处理字符或者字符串时应该使用字符流类,处理字节或者二进制对象时应该使用字节流类。
一般在操作文件流时,不管是字节流还是字符流,都可以按照以下的方式进行。
1、使用File类找到一个文件
2、通过File类实例化字节流或字符流
3、进行字节(字符)的读写操作
4、关闭文件流
下面是2个例子,向文件中写入字符串并读出。
以字节流方式:
package zdxtest;
import java.io.*;
public class TestFile1 { public static void main(String[] args) {
// TODO Auto-generated method stub
//字节流输入输出,向一个文件写入内容然后读出
File f = new File("d:\\1.txt");
FileOutputStream fos = null;
FileInputStream foi = null;
String sin = "今天是七月最后一天";
//创建文件,如果目录下存在文件,先删除再创建
if (f.exists()) {
f.delete();
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//实例化字节流子类:FileOutputStream
try {
fos = new FileOutputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//以字节的方式写入文件并关闭流
byte[] b = sin.getBytes();
try {
fos.write(b);
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//实例化字节流子类:FileInputStream
try {
foi = new FileInputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//以字节的方式读取文件并关闭流
byte[] c = new byte[1000];
int l=0;
try {
/*l = foi.read();
while(l!=-1){
System.out.println(String.valueOf(l));
l=foi.read();
}*/
l = foi.read(c);
foi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String o = new String(c);
System.out.println(o); //打印文件内容
System.out.println(l); //打印读取的字节数 } }
运行后输出:
今天是七月最后一天
27
为什么是27个字节呢,因为我eclipse的默认编码方式是UTF-8,在UTF-8编码方式中,一个汉字是占有三个字节的,一共9个汉字,所以是27个字节。
再来看以字符流的方式实现:
package zdxtest;
import java.io.*; public class FileTest2 { public static void main(String[] args) {
// TODO Auto-generated method stub
File f = new File("d:\\2.txt");
FileReader fr = null;
FileWriter fw = null;
String s = "明天是八月第一天";
//创建文件,如果目录下存在文件,先删除再创建
if(f.exists())
{
f.delete();
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//实例化字符流子类:FileWriter,以字符的方式写入文件并关闭流
try {
fw = new FileWriter(f);
fw.write(s);
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//实例化字符流子类:FileReader,以字符的方式读取文件并关闭流
char [] b = new char[1000];
int l = 0;
try {
fr = new FileReader(f);
l = fr.read(b);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(new String(b)); //打印文件内容
System.out.println(l); //打印读取的字符数
} }
运行输出:
明天是八月第一天
8
一共8个汉字,一个char存储一个汉字,所以是8个字符
java的文件流:字节流(FileInputStream、FileOutputStream)和字符流(FileReader、FileWriter)。的更多相关文章
- (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter
字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字 字符流 字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符 字符流: ...
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- 021.3 IO流——字节流-FileInputStream读取字节
内容:文件读取方法,读取方法例子,read(buf)方法中buf的取值,字节流缓冲区对象—提高读取速度/// 文件读取方法:fis.read(),fis.read(buf),具体看例子 例子:文件读取 ...
- 【IO流】FileInputStream FileOutputStream BufferInputStream BufferOutputStream
FileInputStream IO流用来处理设备之间的数据传输. Java对数据的操作是通过流的方式. Java用于操作流的类都在IO包中. 流按流向分为两种:输入流,输出流. 流按操作类型分为两种 ...
- Java修炼——文件字节输入输出流复制和缓冲流复制
一:文件字节输入输出流复制 首先明确数据源和目的文件,然后就是"中转站",最后就是关闭 package com.bjsxt.ioproject; import java.io.Fi ...
- Java第三阶段学习(三、字符流、转换流)
一.字节流读取中文时出现的问题: 文件中有中文时,用字节流读取会出现乱码的问题,因为一个中文为两个字节. 二.字符编码表 编码表:其实就是生活中字符和计算机二进制的对应关系表. 1.ascii: 一个 ...
- IO流(一)__File对象和字符流FileWriter FileReader
IO流:IO流用来处理设备之间的数据传输,Java对于流的操作对象都在IO包中将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出 流分为字节流和字符流字符流的由来:其实就是字节流读取文字字节 ...
- File类与常用IO流第五章——IO字符流
字符流,只能操作文本文件,不能操作图片.视频等非文本文件 字符输入流 java.io.Reader 字符输入流中一些共性的成员方法 int read():读取单个字符并返回. int read(cha ...
- IO流中将字节流转成字符流的方法
//字节流--->字符流 1. public class TestIO { public static void main(String[] args) throws IOException { ...
- 07 IO流(四)——文件字节流 FileInputStream/FileOutputStream与文件的拷贝
两个类的简述 专门用来对文件进行读写的类. 父类是InputStream.OutputStream 文件读入细节 FileOutputStream流的构造方法:new FileOutputStream ...
随机推荐
- C# winform 右下角弹出窗口结果
using System.Runtime.InteropServices; [DllImport("user32")] private static extern bool Ani ...
- 【shell】通配符
‘’与“” [root@andon ~]# name='$date' [root@andon ~]# echo $name $date [root@andon ~]# name=abc [root@a ...
- 【XML配置文件读取】使用jdom读取XML配置文件信息
在项目中我们经常需要将配置信息写在配置文件中,而XML配置文件是常用的格式. 下面将介绍如何通过jdom来读取xml配置文件信息. 配置文件信息 <?xml version="1.0& ...
- 正则表达式(BREs,EREs,PREs)差异比较
我想各位也和我一样,再linux下使用grep,egrep, awk , sed, vi的搜索时,会经常搞不太清楚,哪此特殊字符得使用转义字符'\' .. 哪些不需要, grep与egrep的差异 ...
- 23. Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. = ...
- Swift与OC之间的选择
1.稳定性 在Swift2.0出来的时候,1.0的代码基本上改了个遍. 2.必要性 目前app store上大概有100w个是oc写的,如果是单纯的爱好,可以学习Swift,如果从事职业开发,那么还是 ...
- ERP_Oracle Erp发展趋势基于SOA电子商务方案
2014-01-12 Created By BaoXinjian
- BIP_开发案例09_结合JavaCP通过BIP API输出报表dataprocess / rtfprocess / foprocess(案例)
20150814 Created By BaoXinjian
- Java爬虫搜索原理实现
permike 原文 Java爬虫搜索原理实现 没事做,又研究了一下爬虫搜索,两三天时间总算是把原理闹的差不多了,基本实现了爬虫搜索的原理,本次实现还是俩程序,分别是按广度优先和深度优先完成的,广度优 ...
- php 自带过滤和转义函数
函数名 释义 介绍 htmlspecialchars 将与.单双引号.大于和小于号化成HTML格式 &转成&"转成"' 转成'<转成<>转成> ...