使用這兩個類可以讀寫文件內容, 是以字節為單位
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();
}
}
}
}
}