使用这两个类可以读写文件内容, 是以字节为单位
package com.wkcto.chapter06.fileinputstream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 以字节为单位读取文件的内容, 循环读取
* @author 蛙课网
*
*/
public class Test03 {
public static void main(String[] args) throws IOException {
//1)在当前程序与指定的文件之间建立流通道
//使用FileInputStream类以字节为单位读取文件内容, 通过构造方法指定要访问的文件
FileInputStream fis = new FileInputStream("d:/abc.txt");
//该文件内容: ABCabc
//2)读取文件数据, read()方法从文件中读取一个字节 ,并把读到 的字节返回, 如果读到文件末尾返回-1
int cc = fis.read();
while( cc != -1 ){
//对读到的cc字节进行处理
// System.out.println( cc ); //把读到的字节打印到屏幕上
System.out.print( (char)cc ); //当前文件中都是英文字符,一个字符对应一个字节, 把读到的字节转换为字符再打印
//继续读取文件中的内容
cc = fis.read();
}
//3)关闭流通道
fis.close();
}
}
package com.wkcto.chapter06.fileinputstream;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 一次读取一个字节数组,循环读取
* @author 蛙课网
*
*/
public class Test04 {
public static void main(String[] args) throws IOException {
//1)建立与文件的流通道
FileInputStream fis = new FileInputStream("d:/abc.txt");
//文件内容:ABCabcwkcto
byte[] bytes = new byte[8];
//2)读取数据保存到字节数组中, 返回读到的字节数,如果读到文件末尾返回-1
int len = fis.read(bytes);
while( len != -1 ){
//从流中读取了len个字节保存到了字节数组中, 可以对这len个字节 进行处理
//把读到的len个字节转换为字符串打印到屏幕上
System.out.print( new String(bytes, 0, len) );
//继续向下读, 读的字节继续保存到字节中
len = fis.read(bytes);
}
//3)关闭流
fis.close();
}
}
package com.wkcto.chapter06.fileinputstream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 异常处理
* @author 蛙课网
*
*/
public class Test05 {
public static void main(String[] args) {
// readData(); //以字节为单位读取文件内容, 异常处理, 手动关闭流
readData2(); //以字节数组为单位读取文件内容, 异常处理, 自动 关闭流, 从JDK7开始
}
private static void readData2() {
try (
FileInputStream fis = new FileInputStream("d:/abc.txt");
) {
byte [] bytes = new byte[8]; //字符数组一般情况下是1024的偶数倍
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 readData() {
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();
}
}
}
}
}
package com.wkcto.chapter06.fileinputstream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 演示FileOutputStream, 把程序中的数据保存到文件中
* @author 蛙课网
*
*/
public class Test06 {
public static void main(String[] args) throws IOException {
//1)建立当前程序与文件之间的流通道, 如果文件不存在,会创建一个新的文件,如果文件已存在,会覆盖原来的内容
// FileOutputStream fos = new FileOutputStream("d:/def.txt");
//1)建立当前程序与文件之间的流通道, 如果文件不存在,会创建一个新的文件,如果文件已存在,原文件后面追加新的内容
FileOutputStream fos = new FileOutputStream("d:/def.txt", true); //以追加的方式打开文件
//2)把数据保存到文件中
//2.1 可以一次保存一个字节
fos.write(97);
fos.write(98);
fos.write(99);
//2.2 可以一次保存一个字节数组
byte[]bytes = "wkcto is a NB Website".getBytes();
fos.write(bytes);
//2.3 换行 , 在Windows操作系统中,换行需要\r\n两个 字符
fos.write('\r');
fos.write('\n');
//2.4 保存字节数组中部分字节
fos.write(bytes, 0, 5);
//3)关闭流通道
fos.close();
}
}
package com.wkcto.chapter06.fileinputstream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 以字节流实现文件的复制
* @author 蛙课网
*
*/
public class Test07 {
public static void main(String[] args) {
String srcFile = "d:/javase/video/6-6 FileOutputStream保存数据到文件.avi" ;
String destFile = "d:/hehe.avi";
// copyFile1( srcFile, destFile ); //以字节为单位复制, 异常处理, 手动关闭流
copyFile2(srcFile ,destFile); //以字节数组为单位复制, 异常处理, 自动关闭流
}
////以字节数组为单位复制, 异常处理, 自动关闭流
private static void copyFile2(String srcFile, String destFile) {
try (
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
) {
byte [] bytes = new byte[1024];
int len = fis.read(bytes);
while( len != -1 ){
//把读到的len个字节保存到fos输出流中
fos.write(bytes, 0, len);
len = fis.read(bytes);
}
} catch (Exception e) {
}
}
////以字节为单位复制, 异常处理, 手动关闭流
private static void copyFile1(String srcFile, String destFile) {
//文件复制,从源文件中读取一个字节, 把该字节保存到目标文件中
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(destFile);
int cc = fis.read(); //从源文件中读取一个字节
while( cc != -1 ){
//把读到的字节cc保存到目标文件中
fos.write(cc);
//继续读到源文件的下个字节
cc = fis.read();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if ( fis != null ) {
try {
fis.close();
// fos.close(); //不能放在一起
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}