文章目錄
- 1.遍歷文件夾
- 2.遍歷子文件夾
- 3.練習流
- 4.以字節流的形式讀取文件內容
- 5.以字節流的形式向文件寫入數據頂折糾問
- 6 .寫入數據到文件
1.遍歷文件夾
一般說來操作系統都會安裝在C盤,所以會有一個 C:\WINDOWS目錄。
遍歷這個目錄下所有的文件(不用遍歷子目錄)
找出這些文件里,最大的和最小(非0)的那個文件,打印出他們的文件名
注: 最小的文件不能是0長度
package Basic.wordhard;import java.io.File;public class Demo {public static void main(String[] args) {File f=new File("C:\\Windows");// 以文件數組的形式,返回當前文件夾下的所有文件(不包含子文件及子文件夾)File fs[]=f.listFiles();File max_file = null,min_file=null;long min=Long.MAX_VALUE;long max=0;for(File e:fs){if(e.length()>max){max=e.length();max_file=e;}if(e.length()!=0&&e.length()<min){min=e.length();min_file=e;}}System.out.println("找出的最大文件為"+max_file.getName()+" 文件大小"+max);System.out.println("找出的最小文件為"+min_file.getName()+" 文件大小"+min);}
}
2.遍歷子文件夾
同上的練習,要求遍歷子文件夾
package Basic.wordhard;
import java.io.File;
public class Demo {static File minFile = null;static File maxFile = null;public static void main(String[] args) {File dir = new File("C:\\WINDOWS");traverseFolder(dir);if (minFile != null) {System.out.println("最小的文件是 " + minFile.getName() + ",其大小是 " + minFile.length() + " 字節");}if (maxFile != null) {System.out.println("最大的文件是 " + maxFile.getName() + ",其大小是 " + maxFile.length() + " 字節");}}public static void traverseFolder(File dir) {File[] files = dir.listFiles();if (files == null || files.length == 0) {return;}for (File file : files) {if (file.isFile()) {if (minFile == null || (file.length() < minFile.length() && file.length() != 0)) {minFile = file;}if (maxFile == null || file.length() > maxFile.length()) {maxFile = file;}} else if (file.isDirectory()) {traverseFolder(file);}}}
}
3.練習流
當不同的介質之間有數據交互的時候,JAVA就使用流來實現。
數據源可以是文件,還可以是數據庫,網絡甚至是其他的程序
比如讀取文件的數據到程序中,站在程序的角度來看,就叫做輸入流
輸入流: InputStream
輸出流:OutputStream
題目:建立一個文件輸入流
package Basic.wordhard;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class Demo {public static void main(String[] args) {try{File f=new File("D://lol.txt");FileInputStream fis=new FileInputStream(f);// 通過這個輸入流,就可以把數據從硬盤,讀取到Java的虛擬機中來,也就是讀取到內存中}catch (IOException e){e.printStackTrace();}}
}
4.以字節流的形式讀取文件內容
InputStream是字節輸入流,同時也是抽象類,只提供方法聲明,不提供方法的具體實現。
FileInputStream 是InputStream子類,以FileInputStream 為例進行文件讀取
package Basic.wordhard;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class Demo {public static void main(String[] args) {try{File f=new File("d://lol.txt");FileInputStream fis=new FileInputStream(f);byte array[]=new byte[(int) f.length()];fis.read(array);for(byte e:array){System.out.println(e);}fis.close();}catch (IOException e){e.printStackTrace();}}
}
5.以字節流的形式向文件寫入數據頂折糾問
OutputStream是字節輸出流,同時也是抽象類,只提供方法聲明,不提供方法的具體實現。
FileOutputStream 是OutputStream子類,以FileOutputStream 為例向文件寫出數據
注: 如果文件d:/lol2.txt不存在,寫出操作會自動創建該文件。
但是如果是文件 d:/xyz/lol2.txt,而目錄xyz又不存在,會拋出異常
package Basic.wordhard;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Demo {public static void main(String[] args) {try{File f=new File("D:\\lol2.txt");FileOutputStream fos=new FileOutputStream(f);byte Date[]={97,98};fos.write(Date);fos.close();}catch (IOException e){e.printStackTrace();}}
}
6 .寫入數據到文件
以字節流的形式向文件寫入數據 中的例子,當lol2.txt不存在的時候,是會自動創建lol2.txt文件的。
但是,如果是寫入數據到d:/xyz/lol2.txt,而目錄xyz又不存在的話,就會拋出異常。
那么怎么自動創建xyz目錄?
如果是多層目錄 d:/xyz/abc/def/lol2.txt 呢?
package Basic.wordhard;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Demo {public static void main(String[] args) {try{File f=new File("d:/xyz/abc/def");if(!f.exists()){f.mkdirs();}byte data[]={97,98};File f1=new File(f,"lol2.txt");FileOutputStream fos=new FileOutputStream(f1);fos.write(data);fos.close();}catch (IOException e){e.printStackTrace();}}
}