1.字节流(以Stream结尾)
2.字符流(以Reader/Writer)
回顾java 基础之强转 :
执行算术运算时,低类型(短字节)可以转换为高类型(长字节);例如: int型转换成double型,char型转换成int型等等;
package com.bjpowernode.demo01;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 读写文件的步骤
* 1)在当前程序与指定的文件之间建立流通道
* 2)读写文件
* 3)关闭流通道
* @author Administrator
*
*/
public class Test01 {
public static void main(String[] args) throws IOException {
//读取d:/abc.txt文件的内容, 使用FileInputStream流类
//1)在当前程序与指定的文件之间建立流通道
//通过FileInputStream构造方法的参数,指定要读取的文件路径
FileInputStream fis = new FileInputStream("d:/abc.txt");
//2)读取文件内容, FileInputStream是一个字节流类, 按字节来读
//read()方法可以从流中,或者理解为文件中读取一个字节, 把读到的字节给返回
int cc = fis.read();
//3)关闭流通道
fis.close();
}
}
package com.bjpowernode.demo01;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 读写文件的内容
* @author Administrator
*
*/
public class Test02 {
public static void main(String[] args) throws IOException {
//读取d:/abc.txt文件的内容, 使用FileInputStream流类
//1)在当前程序与指定的文件之间建立流通道
//通过FileInputStream构造方法的参数,指定要读取的文件路径
FileInputStream fis = new FileInputStream("d:/abc.txt");
//2)读取文件内容, FileInputStream是一个字节流类, 按字节来读
//read()方法可以从流中,或者理解为文件中读取一个字节, 把读到的字节给返回,如果读到文件末尾,返回-1
int cc = fis.read();
while( cc != -1 ){
//对读取的数据进行处理, 把字节转换为字符打印到屏幕上,因为文件中都是英文字符,一个字节就对应一个英文字符
System.out.print( (char)cc );
//读取下个 字节
cc = fis.read();
}
//3)关闭流通道
fis.close();
}
}
package com.bjpowernode.demo01;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
/**
* FileInputStream的常用方法
* @author Administrator
*
*/
public class Test03 {
public static void main(String[] args) throws IOException {
//1)建立流通道
FileInputStream fis = new FileInputStream("d:/abc.txt");
//hello,bjpowernode
//2)打印流中的字节数
System.out.println( fis.available() ); //17
//从流中读取一个字节
fis.read();
System.out.println( fis.available() ); //16 ello,bjpowernode
//3)跳过4个字节
fis.skip(4);
System.out.println( fis.available() ); //12 ,bjpowernode
//4)从流中读取字节,保存到字节数组中
byte [] bytes = new byte[5];
//从流中读取字节保存到bytes数组中, 返回读到的字节数
int len = fis.read(bytes); //,bjpo
//打印字节数组中的字节
System.out.println( len ); //5
System.out.println( Arrays.toString(bytes));
//把字节数组中的字节转换为字符串再打印
System.out.println( new String(bytes));
System.out.println( fis.available() ); //7 wernode
len = fis.read(bytes);
System.out.println( len ); //5
System.out.println( Arrays.toString(bytes)); //[119, 101, 114, 110, 111]
System.out.println( new String(bytes)); //werno
//现在流中 只有2个字节
System.out.println( fis.available() ); //2 de
//只从流中读取了两个字节 , 在处理字节数组中的数据时, 只能处理读到的这两个字节,而不是整个数组
len = fis.read(bytes);
System.out.println( len ); //2
System.out.println( Arrays.toString(bytes)); //[100, 101, 114, 110, 111]
//把读到的字节转换为字符串,而不是把整个数组转换为字符串
System.out.println( new String(bytes, 0 ,len)); //de
System.out.println( fis.available() ); //0
//3)关闭
fis.close();
}
}
package com.bjpowernode.demo01;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 以字节数组为单位从文件中读取数据
* @author Administrator
*
*/
public class Test04 {
public static void main(String[] args) throws IOException {
//1)
FileInputStream fis = new FileInputStream("d:/abc.txt");
//创建字节数组
byte[] bytes = new byte[5];
//从流中读取数据保存到字节数组中, 返回读到的字节数, 如果读到文件末尾返回-1
int len = fis.read(bytes);
while( len != -1 ){
//把读到的字节转换为字符串打印到屏幕上
System.out.print( new String(bytes , 0 , len));
//继续读取
len = fis.read(bytes);
}
//3)
fis.close();
}
}
package com.bjpowernode.demo01;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 异常处理
* @author Administrator
*
*/
public class Test05 {
public static void main(String[] args) {
//按字节读取, 手动关闭流通道, 异常处理
// m1();
//按字节数组读取, 自动关闭流, 异常处理
m2();
}
private static void m2() {
//从JDK7开始,流可以自动关闭
try(
FileInputStream fis = new FileInputStream("d:/abc.txt");
){
byte [] bytes = new byte[5]; //在实际使用时,长度一般为1024或1024*8
int len = fis.read(bytes); //从文件(流)中读取字节保存到字节数组中,返回读到的字节数
while( len != -1 ){
//把读到的字节转换为字符串打印到屏幕上
System.out.print( new String(bytes , 0 , len ) );
len = fis.read(bytes);
}
}catch (Exception e) {
}
}
private static void m1() {
FileInputStream fis = null ;
try {
fis = new FileInputStream("d:/abc.txt");
int cc = fis.read(); //一次读取一个字节
while( cc != -1 ){
System.out.print( (char)cc );
cc = fis.read();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//一般用来释放系统资源
if ( fis != null ) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}