日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java本地读取文件的io类_Java File类与文件IO流总结

發布時間:2025/3/19 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java本地读取文件的io类_Java File类与文件IO流总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.File類

File類被定義為“文件和目錄路徑名的抽象表示形式”,這是因為File類既可以表示“文件”也可以表示“目錄”,他們都通過對應的路徑來描述。通過構造函數創建一個File類對象,則該對象就是指定文件的引用,可以通過該對象對文件操作。通過File對象,可以獲取文件的屬性值(文件大小,能否讀寫,最后修改時間等)。File對象不能對文件進行讀取和寫入的操作,如果想要對文件進行讀寫,那么要使用IO流。

以下函數是File類使用示例。它的功能是,將一個文件的路徑傳入函數,函數判斷此路徑是否有文件,如果此路徑沒有指向任何文件或目錄,那么判斷這個路徑里是否有".",如果有,那么創建這個路徑的文件,如果沒有,創建這個目錄。如果有文件,則判斷此路徑是文件還是目錄,如果是文件,則顯示它的一系列屬性,如果是目錄,那么后續用遞歸的方式顯示它及其子目錄下的文件。文件路徑有兩種表示方法,一種是絕對路徑,一種是相對路徑。絕對路徑是帶盤符的,相對路徑是相對于當前目錄的路徑。

1 public voidtestFile(String path){2 File file = newFile(path);3 if(file.exists()){4 //如果文件存在,再獲取屬性值5 //TODO:獲取文件大小

6 if(file.isFile()){7 System.out.println("文件大小"+file.length());8

9 //TODO:文件是否可讀,可寫

10 System.out.println("是否能寫:"+file.canWrite());11 System.out.println("是否可讀:"+file.canRead());12 //TODO:獲取最后修改時間13 //Date date = new Date();

14 SimpleDateFormat sfm = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");15 String str =sfm.format(file.lastModified());16 System.out.println("文件最后修改時間:"+str);17

18 }19 else if(file.isDirectory()){20 System.out.println("sdfsf");21 this.listFiles(file);22 //這個函數遞歸列出所有子目錄及文件,在后續會有提及

23 }24 }else{25 System.out.println("文件不存在"+path);26 if(path.contains(".")){27 try{28 //創建文件

29 file.createNewFile();30 } catch(IOException e) {31 //TODO Auto-generated catch block

32 e.printStackTrace();33 }34 }else{35

36 //創建目錄:file.mkdir(); 創建單目錄37 //file.mkdirs();循環創建目錄,沒有的話可以創建上層目錄

38 file.mkdirs();39 }40 }41 }

以下是遞歸調用listFiles(file)重載遞歸的函數實現。思想是先用listFiles獲取當前目錄下的所有列表,顯示所有列表的名字,如果當前列表還是個目錄,那么調用自身,進行子目錄的遍歷輸出。

1 public voidlistFiles(File file){2 File [] files = file.listFiles();//獲取當前目錄下所有列表

3 for(File one :files){4 System.out.println("名字:" +one.getName());5 //TODO:如果是目錄,繼續遍歷列出

6 if(one.isDirectory()){7 listFiles(one);8 }9 }10 }

2.字節流

字節流抽象類是InputStream和OutputStream,它們的實現的子類是FileInputStream和FileOutputStream。此處我們使用FileInputStream和FileOutPutStream解決文件讀寫問題。讀入的思想是當需要把文件的內容讀入程序時,要申明一個Byte字節數組,將FileInputStream對象讀入數組。當沒讀完的時候,返回讀取的長度。當讀完的時候,返回-1。當使用完流的時候,要記得關閉流。FileOutputStream寫的時候也是需要將寫的東西轉換為Byte數組寫入文件,寫完關閉流。

1 public static void Input(String path) throwsIOException {2 //構建一個InputStream對象 1、打開流

3 FileInputStream fin = newFileInputStream(path);4 byte[] buf = new byte[1024];5 int iread = 0;//讀取的實際長度6 //TODO:2、讀取文件內容

7 while((iread = fin.read(buf)) != -1){8 System.out.println(newString(buf));9 System.out.println("*****************我已讀"+iread+"**************");10 }11 //TODO:3、關閉流

12 fin.close();13 }14 public static void Output(String path) throwsIOException {15 //1.打開

16 FileOutputStream oup = newFileOutputStream(path);17 String string = "道可道非常道";18 //2.寫

19 oup.write(string.getBytes());20 //3.關閉

21 oup.close();22 }

當讀完文件之后立刻要寫的時候,我們要注意一個問題,就是最后一次存入的時候,可能已經數組里的內容比最后一次讀入的多,那么就會最后一次多輸出一些上一次讀入數組時存的數據。為了解決這個問題,我們采用三個參數的write方式,避免出現亂碼。

public static void ReadAndWrite() throwsIOException{//1、打開

FileInputStream fin = new FileInputStream("d:\\uft.txt");

FileOutputStream fout= new FileOutputStream("d:\\www.txt");//一個讀一個寫,一塊一塊操作

int iread = 0;byte [] buf = new byte[200];while((iread = fin.read(buf))!=-1){

fout.write(buf,0,iread);

System.out.println(newString(buf));

}//關閉

fin.close();

fout.close();

}

3.字符流

字符流:操作的數據單元是16位字符,Reader、Writer? 文本文件。思想跟字節流類似,不同的是我們使用的字符流FileReader類繼承于Reader接口,字符流FileWriter類繼承于Writer接口。具體的操作步驟也是打開流,操作流,關閉流的步驟。

1 public static void Fileread(String path) throwsIOException{2 //1、打開流

3 FileReader fin = newFileReader(path);4 //2、

5 char[] buf = new char[100];//讀取的數據

6 int iread = 0;7 while((iread = fin.read(buf)) !=-1){8 String str = newString(buf);9 System.out.println("[讀了"+iread+"]"+str.substring(0, iread));10 }11 //3、

12 fin.close();13 }14 public static void testOut(String path,String str) throwsIOException{15 FileWriter fr = new FileWriter(path,true);16 fr.write(str);17 fr.close();18 System.out.println("*******************輸出完畢!!!*********************");19 }

當需要讀完了立馬就輸入文件的時候也是需要注意之前字節流的那個問題,寫的時候要用那個三個參數的write函數,不然會將數組里的所有東西存入文件,會存入多余數據。

public static void testIO(String inPath,String outPath) throwsException{//d:\紅鯉魚.txt ->d:\紅鯉魚.out2.txt//1

FileReader fin = newFileReader(inPath);

FileWriter fout= newFileWriter(outPath);//2

char[] buf = new char[100];//讀取的數據

int iread = 0;while((iread = fin.read(buf))!=-1){

String str= newString(buf);

fout.write(buf,0,iread);

System.out.println("["+iread+"]"+str.substring(0, iread));

}//3

fin.close();

}

4.帶緩沖的字符流

BufferedReader和BufferedWriter建立的時候需要傳入一個Writer或者Reader,構造函數也可以指定緩沖區大小。也就是,BufferedReader是高層流,FileReader是底層流。最后要關閉的時候,要先關閉高層流再關閉底層流。

public static void testOut2() throwsIOException{

StringWriter out= newStringWriter();

BufferedWriter fout= new BufferedWriter(out,3);

String string= "ABCDEFG哈哈哈";for(charc:string.toCharArray()){

fout.write(c);

System.out.println(out.getBuffer().toString());

}

}public static void testIoBuffer(String path1,String path2) throwsException{

FileReader in= newFileReader(path1);

BufferedReader fin= newBufferedReader(in);

FileWriter out= new FileWriter(path2,true);

BufferedWriter fout= newBufferedWriter(out);

String s;while((s =fin.readLine())!=null){

fout.write(s);

fout.newLine();

System.out.println(s);

}//關閉

fout.close();

fin.close();

out.close();

in.close();

}

總結

以上是生活随笔為你收集整理的java本地读取文件的io类_Java File类与文件IO流总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。