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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IO流(五)__文件的递归、Properties、打印流PrintStream与PrintWriter、序列流SequenceInputStream...

發布時間:2025/3/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 數據庫

private static void propertiesDemo_5() throws IOException {//讀取這個文件File file=new File("ifo.txt"); if(!file.exists()){file.createNewFile();}FileReader fr=new FileReader("ifo.txt");//創建集合存儲配置信息Properties prop =new Properties();//將流中信息存儲在集合中 prop.load(fr);//添加屬性prop.setProperty("zhaoliu","52");FileWriter fw =new FileWriter(file);//持久化prop.store(fw, "comment");//在控制臺打印prop.list(System.out); // 方法:public void list(PrintStream out) fw.close();fr.close(); }

例一:

?定義功能:獲取一個應用程序運行的次數,如果超過五次,如果超過五次給出使用次數已到請注冊的提示。并不要運行程序。

思路
* 1.應該有計數器
* 每次程序啟動都需要計數一次,并且是在原有的次數上進行計數
* 2.計數器就是一個變量。計數器不許在內存并進行運算
* 而我們需要多次啟動同一個應用程序,使用的是同一個計數器
* 這就需要計數器的生命周期變長,從內存存儲到硬盤文件中
* 3.首先,程序啟動時,應該先訪問這個用于記錄計數器的信息的配置文件
* 獲取上一次計數器次數。并進行使用此時的判斷
* 其次,對次數進行自增,并自增后的次數重新存儲到配置文件中
* 4.文件中的信息該如何進行存儲并體現
* 直接存儲次數可以,但是不明確該數據的含義。所以起名字變得很總要
* 這就有了名字和值的對應,所以可以使用鍵值對
* 可是映射關系map集合搞定,又要讀取硬盤上的數據,所有map+io=Properties

public class PropertiesTest {public static void main(String[] args) throws IOException { //將配置文件封裝成File對象File config=new File("count.properties");if(!config.exists()){config.createNewFile();}FileInputStream fis=new FileInputStream(config);Properties prop=new Properties();prop.load(fis);//從集合中通過鍵獲取次數String value =prop.getProperty("time");//定義計數器。記錄獲取到的次數int count=0;if(value!=null){count=Integer.parseInt(value);if(count>=6){throw new RuntimeException("使用次數已到,請注冊,給錢!"); }} count++;//將改變后的次數重新存儲到集合中prop.setProperty("time", String.valueOf(count));FileOutputStream fos=new FileOutputStream(config);prop.store(fos,"count");fos.close();fis.close(); } } View Code

?

例二:

需求:獲取指定目錄下,指定擴展名的文件(包含子目錄中的),這些文件的絕對路徑寫入到一個文本文件中。

思路
* 1.必須進行深度遍歷
* 2.要在遍歷的過程中進行過濾。將符合條件的內容都存儲到容器中
* 3.對容器中的內容進行遍歷并將絕對路徑寫入到文件中

public class Test {public static void main(String[] args) throws IOException {File dir=new File("E:\\JAVA\\JAVA練習");FilenameFilter filter =new FilenameFilter(){@Overridepublic boolean accept(File dir, String name) {return name.endsWith(".java");}};List<File> list =new ArrayList<File>();getFiles(dir,filter,list);File destFile =new File("javalist.txt");writeToFile(list,destFile);}public static void getFiles(File dir,FilenameFilter filter,List<File> list){File[] files=dir.listFiles();for (File file : files) {if(file.isDirectory()){getFiles(file,filter,list);//遞歸 }else{//對遍歷到的文件進行過濾器的過濾//將符合條件File對象存儲到List集合中 if(filter.accept(dir,file.getName())){list.add(file);}}}}public static void writeToFile(List<File> list,File destFile) throws IOException{BufferedWriter bufw=new BufferedWriter(new FileWriter(destFile));for (File file : list) {bufw.write(file.getAbsolutePath());bufw.newLine();bufw.flush();}} } View Code

?

三、打印流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...的全部內容,希望文章能夠幫你解決所遇到的問題。

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