IO流(五)__文件的递归、Properties、打印流PrintStream与PrintWriter、序列流SequenceInputStream...
一、文件的遍歷
1.需求:對指定目錄進行所有的內容的列出(包含子目錄的內容)—文件的深度遍歷
思想:遞歸的思想,在遞歸的時候要記住遞歸的層次。
public class FileTest {public static void main(String[] args) {File dir =new File("e:\\java\\JavaSE基礎視頻");listAll(dir,0); }private static void listAll(File dir,int level) {level++; //level記錄遞歸的層次//獲取指定目錄下當前的所有文件夾或者文件對象File[] files=dir.listFiles();for (int i = 0; i < files.length; i++) {if(files[i].isDirectory()){listAll(files[i],level); //遞歸 }elseSystem.out.println(getSpace(level)+files[i].getName());} }private static String getSpace(int level) {StringBuilder sb=new StringBuilder();sb.append("|--");for (int i = 0; i < level; i++) {sb.insert(0,"| ");} return sb.toString();}}2.需求:刪除指定文件夾中的所有內容
思想:必須從里面往外刪除,進行深度遍歷
public class RemoveDirTest {public static void main(String[] args) {File dir=new File("e://111");removeDir(dir); }//這種刪除是徹底刪除,不經過回收站private static void removeDir(File dir) {File [] files=dir.listFiles();for (File file : files) {if(file.isDirectory()){removeDir(file);}else{file.delete();}}dir.delete(); } }?
二、Properties
* properties繼承自hashtable
* 特點:
* 1.該集合中的鍵和值都是字符串類型
* 2.集合中的數據可以保存在流中,或者從流獲取
* 3.map+io=Properties
* 通常該集合用于操作以鍵值對形式存在的配置文件
* 配置信息:鍵值對 xml 數據庫
例一:
?定義功能:獲取一個應用程序運行的次數,如果超過五次,如果超過五次給出使用次數已到請注冊的提示。并不要運行程序。
思路:
* 1.應該有計數器
* 每次程序啟動都需要計數一次,并且是在原有的次數上進行計數
* 2.計數器就是一個變量。計數器不許在內存并進行運算
* 而我們需要多次啟動同一個應用程序,使用的是同一個計數器
* 這就需要計數器的生命周期變長,從內存存儲到硬盤文件中
* 3.首先,程序啟動時,應該先訪問這個用于記錄計數器的信息的配置文件
* 獲取上一次計數器次數。并進行使用此時的判斷
* 其次,對次數進行自增,并自增后的次數重新存儲到配置文件中
* 4.文件中的信息該如何進行存儲并體現
* 直接存儲次數可以,但是不明確該數據的含義。所以起名字變得很總要
* 這就有了名字和值的對應,所以可以使用鍵值對
* 可是映射關系map集合搞定,又要讀取硬盤上的數據,所有map+io=Properties
?
例二:
需求:獲取指定目錄下,指定擴展名的文件(包含子目錄中的),這些文件的絕對路徑寫入到一個文本文件中。
思路:
* 1.必須進行深度遍歷
* 2.要在遍歷的過程中進行過濾。將符合條件的內容都存儲到容器中
* 3.對容器中的內容進行遍歷并將絕對路徑寫入到文件中
?
三、打印流PrintStream和PrintWriter
打印流--必須是輸出流(兩個都是)
system.out流就是PrintStream的子類
區別:
1.PrintStream(字節流) PrintWriter(字符流)
2.使用PrintStream進行輸出,可以不用指定手動刷新或者設置自動刷新即可完成輸出,而PrintWriter則不同,
一定要在構造方法中設置自動刷新(構造函數中autoFlush置為true)或者在調用println()方法以后再調用flush(),才可以立即完成輸出。
public class PrintStreamDemo {public static void main(String[] args) throws IOException {BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));PrintStream out =new PrintStream("print1.txt");String line=null;while ((line=bufr.readLine())!=null){if("over".equals(line))break;out.println(line.toUpperCase());//out.flush(); } out.close();bufr.close();}} public class PrintWriterDemo {public static void main(String[] args) throws IOException {BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//PrintWriter out=new PrintWriter(System.out);PrintWriter out=new PrintWriter(new FileWriter("PrintWriter.txt"),true);String line=null;while ((line=bufr.readLine())!=null){if("over".equals(line))break;out.println(line.toUpperCase());//out.flush(); }out.close();bufr.close();}}?
四、序列流SequenceInputStream
需求:將三個文件中的數據并到一個文件中
public class SequenceInputStreamDemo {public static void main(String[] args) throws IOException { /** 需求:將三個文件中的數據并到一個文件中*/ ArrayList<FileInputStream> al=new ArrayList<FileInputStream>();for (int i = 1; i <= 3; i++) {al.add(new FileInputStream(i+".txt"));}Enumeration<FileInputStream> en=Collections.enumeration(al);//使用collection的靜態方法獲取枚舉對象SequenceInputStream sis=new SequenceInputStream(en); //SequenceInputStream只能接收枚舉對象,拼接的序列流對象FileOutputStream fos=new FileOutputStream("4.txt");byte[] buf=new byte[1024];int len=0;while((len=sis.read(buf))!=-1){fos.write(buf,0,len);}fos.close();sis.close(); }}?
轉載于:https://www.cnblogs.com/xiangkejin/p/5949425.html
總結
以上是生活随笔為你收集整理的IO流(五)__文件的递归、Properties、打印流PrintStream与PrintWriter、序列流SequenceInputStream...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运维工具列表收集
- 下一篇: ActiveReports中如何在后台导