使用這兩個類可以讀寫文件內(nèi)容, 是以字節(jié)為單位
package com.wkcto.chapter06.fileinputstream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 以字節(jié)為單位讀取文件的內(nèi)容, 循環(huán)讀取
* @author 蛙課網(wǎng)
*
*/
public class Test03 {
public static void main(String[] args) throws IOException {
//1)在當(dāng)前程序與指定的文件之間建立流通道
//使用FileInputStream類以字節(jié)為單位讀取文件內(nèi)容, 通過構(gòu)造方法指定要訪問的文件
FileInputStream fis = new FileInputStream("d:/abc.txt");
//該文件內(nèi)容: ABCabc
//2)讀取文件數(shù)據(jù), read()方法從文件中讀取一個字節(jié) ,并把讀到 的字節(jié)返回, 如果讀到文件末尾返回-1
int cc = fis.read();
while( cc != -1 ){
//對讀到的cc字節(jié)進(jìn)行處理
// System.out.println( cc ); //把讀到的字節(jié)打印到屏幕上
System.out.print( (char)cc ); //當(dāng)前文件中都是英文字符,一個字符對應(yīng)一個字節(jié), 把讀到的字節(jié)轉(zhuǎn)換為字符再打印
//繼續(xù)讀取文件中的內(nèi)容
cc = fis.read();
}
//3)關(guān)閉流通道
fis.close();
}
}
package com.wkcto.chapter06.fileinputstream;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 一次讀取一個字節(jié)數(shù)組,循環(huán)讀取
* @author 蛙課網(wǎng)
*
*/
public class Test04 {
public static void main(String[] args) throws IOException {
//1)建立與文件的流通道
FileInputStream fis = new FileInputStream("d:/abc.txt");
//文件內(nèi)容:ABCabcwkcto
byte[] bytes = new byte[8];
//2)讀取數(shù)據(jù)保存到字節(jié)數(shù)組中, 返回讀到的字節(jié)數(shù),如果讀到文件末尾返回-1
int len = fis.read(bytes);
while( len != -1 ){
//從流中讀取了len個字節(jié)保存到了字節(jié)數(shù)組中, 可以對這len個字節(jié) 進(jìn)行處理
//把讀到的len個字節(jié)轉(zhuǎn)換為字符串打印到屏幕上
System.out.print( new String(bytes, 0, len) );
//繼續(xù)向下讀, 讀的字節(jié)繼續(xù)保存到字節(jié)中
len = fis.read(bytes);
}
//3)關(guān)閉流
fis.close();
}
}
package com.wkcto.chapter06.fileinputstream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 異常處理
* @author 蛙課網(wǎng)
*
*/
public class Test05 {
public static void main(String[] args) {
// readData(); //以字節(jié)為單位讀取文件內(nèi)容, 異常處理, 手動關(guān)閉流
readData2(); //以字節(jié)數(shù)組為單位讀取文件內(nèi)容, 異常處理, 自動 關(guān)閉流, 從JDK7開始
}
private static void readData2() {
try (
FileInputStream fis = new FileInputStream("d:/abc.txt");
) {
byte [] bytes = new byte[8]; //字符數(shù)組一般情況下是1024的偶數(shù)倍
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, 把程序中的數(shù)據(jù)保存到文件中
* @author 蛙課網(wǎng)
*
*/
public class Test06 {
public static void main(String[] args) throws IOException {
//1)建立當(dāng)前程序與文件之間的流通道, 如果文件不存在,會創(chuàng)建一個新的文件,如果文件已存在,會覆蓋原來的內(nèi)容
// FileOutputStream fos = new FileOutputStream("d:/def.txt");
//1)建立當(dāng)前程序與文件之間的流通道, 如果文件不存在,會創(chuàng)建一個新的文件,如果文件已存在,原文件后面追加新的內(nèi)容
FileOutputStream fos = new FileOutputStream("d:/def.txt", true); //以追加的方式打開文件
//2)把數(shù)據(jù)保存到文件中
//2.1 可以一次保存一個字節(jié)
fos.write(97);
fos.write(98);
fos.write(99);
//2.2 可以一次保存一個字節(jié)數(shù)組
byte[]bytes = "wkcto is a NB Website".getBytes();
fos.write(bytes);
//2.3 換行 , 在Windows操作系統(tǒng)中,換行需要\r\n兩個 字符
fos.write('\r');
fos.write('\n');
//2.4 保存字節(jié)數(shù)組中部分字節(jié)
fos.write(bytes, 0, 5);
//3)關(guān)閉流通道
fos.close();
}
}
package com.wkcto.chapter06.fileinputstream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 以字節(jié)流實現(xiàn)文件的復(fù)制
* @author 蛙課網(wǎng)
*
*/
public class Test07 {
public static void main(String[] args) {
String srcFile = "d:/javase/video/6-6 FileOutputStream保存數(shù)據(jù)到文件.avi" ;
String destFile = "d:/hehe.avi";
// copyFile1( srcFile, destFile ); //以字節(jié)為單位復(fù)制, 異常處理, 手動關(guān)閉流
copyFile2(srcFile ,destFile); //以字節(jié)數(shù)組為單位復(fù)制, 異常處理, 自動關(guān)閉流
}
////以字節(jié)數(shù)組為單位復(fù)制, 異常處理, 自動關(guān)閉流
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個字節(jié)保存到fos輸出流中
fos.write(bytes, 0, len);
len = fis.read(bytes);
}
} catch (Exception e) {
}
}
////以字節(jié)為單位復(fù)制, 異常處理, 手動關(guān)閉流
private static void copyFile1(String srcFile, String destFile) {
//文件復(fù)制,從源文件中讀取一個字節(jié), 把該字節(jié)保存到目標(biāo)文件中
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(srcFile);
fos = new FileOutputStream(destFile);
int cc = fis.read(); //從源文件中讀取一個字節(jié)
while( cc != -1 ){
//把讀到的字節(jié)cc保存到目標(biāo)文件中
fos.write(cc);
//繼續(xù)讀到源文件的下個字節(jié)
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();
}
}
}
}
}