Java讀寫文件的IO流分兩大類,字節流和字符流,基類分別是
字符:Reader和Writer
字節:InputStream和OutPutStream
BufferedInputStream是帶緩衝區的輸入流,默認緩衝區大小是8M,能夠減少訪問磁盤的次數,提高文件讀取性能;
BufferedOutputStream是帶緩衝區的輸出流,能夠提高文件的寫入效率。
1.java的文件操作
1.1目錄或文件的創建
package com.文件流.s1;
import java.io.File;//java.io.File類用於表示文件(目錄)
import java.io.IOException;
/**
* 文件操作:文件目錄創建,文件創建
*/
public class Demo1 {
public static void main(String[] args) throws IOException {
//文件對象 mac,linux中注意權限問題
File file = new File("D://java創建的目錄");
boolean b = file.mkdir(); // 創建虛擬目錄
if (b) {
System.out.println("目錄創建成功");
//文件對象 mac,linux中注意權限問題
file = new File("D://java創建的目錄//java創建的文件.txt");
boolean b2 = file.createNewFile(); // 創建文件
if (b2) {
System.out.println("文件創建成功!");
} else {
System.out.println("文件創建失敗!");
}
} else {
System.out.println("目錄創建失敗");
}
}
}
1.2文件或目錄刪除操作
package com.文件流.s1;
import java.io.File;
import java.io.IOException;
/**
* 文件操作:文件刪除和文件目錄刪除
*/
public class Demo2 {
public static void main(String[] args) throws IOException {
File file=new File("D://java創建的目錄//java創建的文件.txt");
if(file.exists()){ // 判斷文件是否存在
boolean b=file.delete(); // 刪除文件
if(b){
System.out.println("文件刪除成功");
}else{
System.out.println("文件刪除失敗");
}
file=new File("D://java創建的目錄");
if(file.exists()){
boolean b2=file.delete(); // 刪除目錄
if(b2){
System.out.println("目錄刪除成功");
}else{
System.out.println("目錄刪除失敗");
}
}
}
}
}
1.3遍歷文件(查找文件)
package com.文件流.s1;
import java.io.File;
import java.io.IOException;
/**
* 目錄的遍歷
*/
public class Demo3 {
public static void main(String[] args) {
String path = "D:\\";//要遍歷的路徑
File file = new File(path);//獲取其file對象
File[] fs = file.listFiles();//遍歷path下的文件和目錄,放在File數組中
for (File f : fs) { //遍歷File[]數組
if (!f.isDirectory())//若非目錄(即文件),則打印
System.out.println(f);
}
}
}
1.4文件的遍歷
package com.文件流.s1;
import java.io.File;
import java.io.IOException;
/**
* 文件遞歸
*/
public class Demo4 {
public static void listFile(File file){
if(file!=null){
if(file.isDirectory()){ // 是目錄情況
System.out.println(file); // 打印目錄
File files[]=file.listFiles(); // 遍歷目錄
if(files!=null){
for(int i=0;i<files.length;i++){
listFile(files[i]); // 遞歸調用自身
}
}
}else{ // 是文件情況
System.out.println(file); // 是文件 直接打印文件的路徑
}
}
}
public static void main(String[] args) throws IOException {
File file=new File("D://");
listFile(file);
}
}
2.字節流
2.1輸入流
第一種:
package com.文件流.s2;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* 字節流:輸入操作
*/
public class Demo01 {
/**
* 字節
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
File file=new File("D:\\a.txt");//創建文件對象
InputStream inputStream=new FileInputStream(file);//創建字節輸出流對象
byte b[]=new byte[1024];//創建字節數組對象
int len=inputStream.read(b);//讀取字節數組長度
inputStream.close();//關閉字節流
System.out.println("讀取的內容是:"+new String(b,0,len));
}
}
第二種:
package com.文件流.s2;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* 字節流:輸入操作
*/
public class Demo2 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\a.txt");//創建文件對象
InputStream inputStream=new FileInputStream(file);//創建字節輸出流對象
int fileLength=(int) file.length();//文件的長度
byte b[]=new byte[fileLength];//創建字節文件對象
inputStream.read(b);//獲取字節流長度
inputStream.close();//關閉字節流
System.out.println("讀取的內容是:"+new String(b));
}
}
第三種:
package com.文件流.s2;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* 字節流:輸入操作
*/
public class Demo3 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\a.txt");//創建文件對象
InputStream inputStream=new FileInputStream(file);//創建字節輸出流對象
int fileLength=(int) file.length();//獲取字節長度
byte b[]=new byte[fileLength];//創建字節數組對象
int len=0;
int temp=0;//字節流的長度
while((temp=inputStream.read())!=-1){//如果字節流的長度不等於-1
b[len++]=(byte) temp;
}
inputStream.close();
System.out.println("讀取的內容是:"+new String(b));
}
}
2.2輸出流
第一種:
package com.文件流.s2;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
/**
* 字節流:輸出操作
*/
public class Demo4 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\a.txt");//創建文件對象
OutputStream out=new FileOutputStream(file);//創建文件輸出流對象
String str="你好,我好,大家好 ,愛生活,愛拉芳";//字符串
byte b[]=str.getBytes();//字符串轉換爲字節數組
out.write(b);//寫入
out.close();//關閉
}
}
第二種:
package com.文件流.s2;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
/**
* 字節流:輸出操作
*/
public class Demo5 {
public static void main(String[] args) throws Exception {
File file=new File("D:\\a.txt");//創建文件對象
OutputStream out=new FileOutputStream(file,true);//創建字符輸出對象
String str="你好,我好,大家好 ,愛生活,愛拉芳322好啊";//字符串
byte b[]=str.getBytes();//字符串轉換爲字節數組
out.write(b);
out.close();
}
}
3.緩衝區
package com.文件流.s3;
import java.io.*;
/**
* 緩衝方式
*/
public class Demo01 {
/**
* 緩衝方式
* @throws Exception
*/
public static void bufferStream()throws Exception{
BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream("D:\\a.txt"));//創建緩衝區輸入流
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("D:\\複製a.txt"));//創建緩衝區輸出流
int b=0;
long startTime=System.currentTimeMillis();//獲取當前的時間
while((b=bufferedInputStream.read())!=-1){//緩衝區字節流還有
bufferedOutputStream.write(b);//寫入緩衝區
}
bufferedInputStream.close();//關閉緩衝區輸入流
bufferedOutputStream.close();//關閉緩衝區輸出流
long endTime=System.currentTimeMillis();//獲取當前的系統時間
System.out.println("緩衝方式話費的時間:"+(endTime-startTime));
}
/**
* 非緩衝方式
* @throws Exception
*/
public static void stream()throws Exception{
InputStream inputStream=new FileInputStream("D:\\a.txt");//創建輸入流
OutputStream outputStream=new FileOutputStream("D:\\複製a.txt");//創建輸出流
int b=0;
long startTime=System.currentTimeMillis();//獲取當前系統時間
while((b=inputStream.read())!=-1){//字節流的長度還有
outputStream.write(b);//寫入
}
inputStream.close();//關閉輸入流
outputStream.close();//關閉輸出流
long endTime=System.currentTimeMillis();//獲取當前時間
System.out.println("非緩衝方式話費的時間:"+(endTime-startTime));
}
public static void main(String[] args) throws Exception {
stream();
// bufferStream();
}
}
4.字符流
4.1字符流讀
第一種
package com.文件流.s4;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
/**
* 字符流:讀
*/
public class Demo01 {
/**
* 字符
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
File file=new File("D://a.txt");//創建文件
Reader reader=new FileReader(file);//創建讀字符對象
char c[]=new char[1024];//創建字符對象
int len=reader.read(c);//讀取文件字符長度
reader.close();//關閉字符流對象
System.out.println("讀取的內容是:"+new String(new String(c,0,len)));
}
}
第二種
package com.文件流.s4;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
/**
* 字符流:輸入流
*/
public class Demo2 {
public static void main(String[] args) throws Exception {
File file=new File("D://a.txt");//創建文件對象
Reader reader=new FileReader(file);//創建字符流對對象
char c[]=new char[1024];//創建字符流
int len=0;
int temp=0;
while((temp=reader.read())!=-1){//文件還在讀
c[len++]=(char) temp;
}
reader.close();
System.out.println("讀取的內容是:"+new String(new String(c,0,len)));
}
}
4.2字符流寫
第一種
package com.文件流.s4;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
/**
* 字符流:輸出流
*/
public class Demo3 {
public static void main(String[] args) throws Exception {
File file=new File("D://測試文件.txt");//創建文件對象
Writer out=new FileWriter(file);//創建字符流對象
out.write("愛我中華");//寫入
out.close();//關閉
}
}
第二種
package com.文件流.s4;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class Demo4 {
public static void main(String[] args) throws Exception {
File file=new File("D://測試文件1.txt");//創建文件對象
Writer out=new FileWriter(file,true);//創建字符寫入對象
out.write("愛我中華");
out.close();
}
}