輸入輸出流? 在Java中,我們把能夠讀取一個字節序列的對象稱作一個輸入流;而我們把夠寫一個字節序列稱作一個輸出流。它們分別由抽象類? InputStream和OutputStream類表示。因為面向字節的流不方便用來處理存儲為Unicode(每個字符使用兩個字節)的信息。所以Java? 引入了用來處理Unicode字符的類層次,這些類派生自抽象類Reader和Writer,它們用于讀寫雙字節的Unicode字符,而不是單字節字符。? Java.io包簡介? JDK標準幫助文檔是這樣解釋Java.io包的,通過數據流、序列和文件系統為系統提供輸入輸出。? InputStream類和OutputStream類? InputStream類是所有輸入數據流的父類,它是一個抽象類,定義了所有輸入數據流都具有的共通特性。? java.io.InputStream的方法如下:? public?abstract?read()throws?IOException? 讀取一個字節并返回該字節,如果到輸入源的末則返回-1。一個具體的輸入流類需要重載此方法,以提供?有用的功能。例如:在FileInputStream類中,該方法從一個文件讀取一個字節。? public?int?read(byte[]?b)throws?IOException? 把數據讀入到一個字節數據中,并返回實際讀取的字節數目。如果遇到流末?則返回-1,該方法最多讀取b.length個字節。? public?abstract?int?read(byte[]?b,int?off,int?len)throws?IOException? 把數據讀入到一個字節數組中并返回實際讀取的字節數目。如果遇到流的末尾則的返回-1。?其中參數off表示第一個字節在b中的位置,len表示讀取的最大字節數。? public?long?skip(long?n)throws?IOException? 略過N個字節不讀取,會返回實際略過的字節數目。因為數據流中剩下的數據可能不到N?個字節那么多,所以此時返回值會小于N。? public?int?available()throws?IOException? read方法(包括后面要講的OutputStream類的Write方法)都能夠陰塞一個線程,直到字節被?實際讀取或寫入。這意味著如果一個流不能立即被讀或被寫? /*? *?Created?on?2005-3-10? *?To?change?the?template?for?this?generated?file?go?to? *?Window>Preferences>Java>Code?Generation>Code?and?Comments? */?
import?java.io.BufferedReader;? import?java.io.File;? import?java.io.FileReader;? import?java.io.FileWriter;? import?java.io.IOException;? import?java.io.PrintWriter;? import?java.io.FileInputStream;;? /**? *?@author?zhangqinglin? *?To?change?the?template?for?this?generated?type?comment?go?to? *?Window>Preferences>Java>Code?Generation>Code?and?Comments? */? public?class?Files? {? public?static?void?main(String[]?args)?throws?IOException? {? Files?f?=?new?Files();? //?System.out.println(f.readFile("f:\\LinkFile.java"));? f.fileIsNull("D:\\java\\","ejb");? //f.readLineFile("D:\\java\\","TestFile.txt");? //?System.out.println(f.fileIsNull("f:\\","122.txt"));? //f.readFolderByFile("F:\\Login");?//不區分大小寫 //?System.out.println(f.createAndDeleteFolder("ss","f:\\"));? //?System.out.println(f.createAndDeleteFile("f:\\ss\\","TestFile.dat"));? //f.createAndDeleteFolder("1","D:\\java\\"); String[]?ss?=?new?String[50];?//定義對象數組 for(int?i=0;i<ss.length;i++)? {? ss?=?"信息技術和互聯網(計算機軟硬件,通訊)?"+i;? }? f.writeFile("D:\\java\\","TestFile.txt",ss);?
}? /**? *?文件的寫入? *?@param?filePath(文件路徑)? *?@param?fileName(文件名)? *?@param?args[]? *?@throws?IOException? */? public?void?writeFile(String?filePath,String?fileName,String[]?args)?throws?IOException? {? FileWriter?fw?=?new?FileWriter(filePath+fileName);? PrintWriter?out=new?PrintWriter(fw);? for(int?i=0;i<args.length;i++)? {? out.write(args);? out.println();? //out.flush();? } System.out.println("寫入成功!");? fw.close();? out.close();? }? /**? *?文件的寫入? *?@param?filePath(文件路徑)? *?@param?fileName(文件名)? *?@param?args? *?@throws?IOException? */? public?void?writeFile(String?filePath,String?fileName,String?args)?throws?IOException? {? FileWriter?fw?=?new?FileWriter(filePath+fileName);? fw.write(args);? fw.close();? }? /**? *?創建與刪除文件? *?@param?filePath? *?@param?fileName? *?@return?創建成功返回true? *?@throws?IOException? */? public?boolean?createAndDeleteFile(String?filePath,String?fileName)?throws?IOException? {? boolean?result?=?false;? File?file?=?new?File(filePath,fileName);? if(file.exists()){ if(file.isFile())? {? file.delete();? result?=?true;? System.out.println("文件已經刪除!");? }? else? { ???System.out.println("對不起,該路徑為目錄!");? ??? } } else? {? file.createNewFile();?//jdk5.0的新方法 result?=?true;? System.out.println("文件已經創建!");? }? return?result;? }? /**? *?創建和刪除目錄? *?@param?folderName? *?@param?filePath? *?@return?刪除成功返回true? */? public?boolean?createAndDeleteFolder(String?folderName,String?filePath)? {? boolean?result?=?false;? try? {? File?file?=?new?File(filePath+folderName);? if(file.exists())? {? if(file.isDirectory()){ file.delete();? System.out.println("目錄已經存在,已刪除!");? result?=?true;? } else{ System.out.println("對不起,該路徑為文件!");? } }? else? {? file.mkdir();? System.out.println("目錄不存在,已經建立!");? result?=?true;? }? }? catch(Exception?ex)? {? result?=?false;? System.out.println("CreateAndDeleteFolder?is?error:"+ex);? }? return?result;? }? /**? *?輸出目錄中的所有文件及目錄名字? *?@param?filePath? */? public?void?readFolderByFile(String?filePath) {? File?file?=?new?File(filePath);? File[]?tempFile?=?file.listFiles();? for(int?i?=?0;i<tempFile.length;i++)? {? if(tempFile.isFile())? {? System.out.println("File?:?"+tempFile.getName());? }? if(tempFile.isDirectory())? {? System.out.println("Directory?:?"+tempFile.getName());? }? }? }? /**? *?檢查文件中是否為一個空? *?@param?filePath? *?@param?fileName? *?@return?為空返回true? *?@throws?IOException? */? public?boolean?fileIsNull(String?filePath,String?fileName)?throws?IOException? {? boolean?result?=?false;? FileReader?fr?=?new?FileReader(filePath+fileName);? if(fr.read()?==?-1)? {? result?=?true;? System.out.println(fileName+"?文件中沒有數據!");? }? else? {? System.out.println(fileName+"?文件中有數據!");? }? fr.close();? return?result;? }? /**? *?讀取文件中的所有內容? *?@param?filePath? *?@param?fileName? *?@throws?IOException? */? public?void?readAllFile(String?filePath,String?fileName)?throws?IOException? {? FileReader?fr?=?new?FileReader(filePath+fileName);? //PrintWriter?pr=new?PrintWriter(fr); //pr.print int?count?=?fr.read();? while(count?!=?-1)? {? System.out.print((char)count);? count?=?fr.read();? //System.out.println(); if(count?==?13)? {? fr.skip(1);? System.out.print("跳過!");? } }? System.out.println();? fr.close();? }? /**? *?一行一行的讀取文件中的數據? *?@param?filePath? *?@param?fileName? *?@throws?IOException? */? public?void?readLineFile(String?filePath,String?fileName)?throws?IOException? {? FileReader?fr?=?new?FileReader(filePath+fileName);? BufferedReader?br?=?new?BufferedReader(fr);? String?line?=?br.readLine();? while(line?!=?null)? {? System.out.println(line);? line?=?br.readLine();? }? br.close();? fr.close();? } }
/***************************以下是常用的文件操作方法******************************/
/**? ???? *? @see 新建目錄? ???? *? @param? folderPath? String? 如? c:/fqf? ???? *? @return? boolean? ???? */? ?? public? void? newFolder(String? folderPath)? {? ?????? try? {? ?????????? String? filePath? =? folderPath;? ?????????? filePath? =? filePath.toString();? ?????????? java.io.File? myFilePath? =? new? java.io.File(filePath);? ?????????? if? (!myFilePath.exists())?? ????????????{? ?????????????? myFilePath.mkdir();? ?????????? }? ?????? }? ?????? catch? (Exception? e)? ???????{? ?????????? System.out.println("新建目錄操作出錯");? ?????????? e.printStackTrace();? ?????? }? ?? }? ? ?? /**? ???? *? @see 新建文件? ???? *? @param? filePathAndName? String? 文件路徑及名稱? 如c:/fqf.txt? ???? *? @param? fileContent? String? 文件內容? ???? *? @return? boolean? ???? */? ?? public? void? newFile(String? filePathAndName,? String? fileContent)? {? ? ?????? try? {? ?????????? String? filePath? =? filePathAndName;? ?????????? filePath? =? filePath.toString();? ?????????? File? myFilePath? =? new? File(filePath);? ?????????? if? (!myFilePath.exists())? {? ?????????????? myFilePath.createNewFile();? ?????????? }? ?????????? FileWriter? resultFile? =? new? FileWriter(myFilePath);? ?????????? PrintWriter? myFile? =? new? PrintWriter(resultFile);? ?????????? String? strContent? =? fileContent;? ?????????? myFile.println(strContent);? ?????????? resultFile.close();? ? ?????? }? ?????? catch? (Exception? e)? {? ?????????? System.out.println("新建文件操作出錯");? ?????????? e.printStackTrace();? ? ?????? }? ? ?? }? ? ?? /**? ???? *? @see 刪除文件? ???? *? @param? filePathAndName? String? 文件路徑及名稱? 如c:/fqf.txt? ???? *? @param? fileContent? String? ???? *? @return? boolean? ???? */? ?? public? void? delFile(String? filePathAndName)? {? ?????? try? {? ?????????? String? filePath? =? filePathAndName;? ?????????? filePath? =? filePath.toString();? ?????????? java.io.File? myDelFile? =? new? java.io.File(filePath);? ?????????? myDelFile.delete();? ?????????? System.out.println(myDelFile + "\\文件存在,已刪除。"); ? ?????? }? ?????? catch? (Exception? e)? {? ?????????? System.out.println("刪除文件操作出錯");? ?????????? e.printStackTrace();? ? ?????? }? ? ?? }? ? ?? /**? ???? *? @see 刪除文件夾? ???? *? @param? filePathAndName? String? 文件夾路徑及名稱? 如c:/fqf? ???? *? @param? fileContent? String? ???? *? @return? boolean? ???? */? ?? public? void? delFolder(String? folderPath)? {? ?????? try? {? ?????????? delAllFile(folderPath);? //刪除完里面所有內容? ?????????? String? filePath? =? folderPath;? ?????????? filePath? =? filePath.toString();? ?????????? java.io.File? myFilePath? =? new? java.io.File(filePath);? ?????????? myFilePath.delete();? //刪除空文件夾? ? ?????? }? ?????? catch? (Exception? e)? {? ?????????? System.out.println("刪除文件夾操作出錯");? ?????????? e.printStackTrace();? ? ?????? }? ? ?? }? ? ?? /**? ???? *? @see 刪除文件夾里面的所有文件? ???? *? @param? path? String? 文件夾路徑? 如? c:/fqf? ???? */? ?? public? void? delAllFile(String? path)? {? ?????? File? file? =? new? File(path);? ?????? if? (!file.exists())? {? ?????????? return;? ?????? }? ?????? if? (!file.isDirectory())? {? ?????????? return;? ?????? }? ?????? String[]? tempList? =? file.list();? ?????? File? temp? =? null;? ?????? for? (int? i? =? 0;? i? <? tempList.length;? i++)? {? ?????????? if? (path.endsWith(File.separator))? {? ?????????????? temp? =? new? File(path? +? tempList[i]);? ?????????? }? ?????????? else? {? ?????????????? temp? =? new? File(path? +? File.separator? +? tempList[i]);? ?????????? }? ?????????? if? (temp.isFile())? {? ?????????????? temp.delete();? ?????????? }? ?????????? if? (temp.isDirectory())? {? ?????????????? delAllFile(path+"/"+? tempList[i]);//先刪除文件夾里面的文件? ?????????????? delFolder(path+"/"+? tempList[i]);//再刪除空文件夾? ?????????? }? ?????? }? ?? }? ? ?? /**? ???? *? @see 復制單個文件? ???? *? @param? oldPath? String? 原文件路徑? 如:c:/fqf.txt? ???? *? @param? newPath? String? 復制后路徑? 如:f:/fqf.txt? ???? *? @return? boolean? ???? */? ?? public? void? copyFile(String? oldPath,? String? newPath)? {? ?????? try? {? ?????????? int? bytesum? =? 0;? ?????????? int? byteread? =? 0;? ?????????? File? oldfile? =? new? File(oldPath);? ?????????? if? (oldfile.exists())? {? //文件存在時? ?????????????? InputStream? inStream? =? new? FileInputStream(oldPath);? //讀入原文件? ?????????????? FileOutputStream? fs? =? new? FileOutputStream(newPath);? ?????????????? byte[]? buffer? =? new? byte[1444];? ?????????????? //int? length = 0;? ?????????????? while? (? (byteread? =? inStream.read(buffer))? !=? -1)? {? ?????????????????? bytesum? +=? byteread;? //字節數? 文件大小? ?????????????????? System.out.println(bytesum);? ?????????????????? fs.write(buffer,? 0,? byteread);? ?????????????? }? ?????????????? inStream.close();? ?????????? }? ?????? }? ?????? catch? (Exception? e)? {? ?????????? System.out.println("復制單個文件操作出錯");? ?????????? e.printStackTrace();? ? ?????? }? ? ?? }? ? ?? /**? ???? *? @see 復制整個文件夾內容? ???? *? @param? oldPath? String? 原文件路徑? 如:c:/fqf? ???? *? @param? newPath? String? 復制后路徑? 如:f:/fqf/ff? ???? *? @return? boolean? ???? */? ?? public? void? copyFolder(String? oldPath,? String? newPath)? {? ? ?????? try? {? ?????????? (new? File(newPath)).mkdirs();? //如果文件夾不存在? 則建立新文件夾? ?????????? File? a=new? File(oldPath);? ?????????? String[]? file=a.list();? ?????????? File? temp=null;? ?????????? for? (int? i? =? 0;? i? <? file.length;? i++)? {? ?????????????? if(oldPath.endsWith(File.separator)){? ?????????????????? temp=new? File(oldPath+file[i]);? ?????????????? }? ?????????????? else{? ?????????????????? temp=new? File(oldPath+File.separator+file[i]);? ?????????????? }? ? ?????????????? if(temp.isFile()){? ?????????????????? FileInputStream? input? =? new? FileInputStream(temp);? ?????????????????? FileOutputStream? output? =? new? FileOutputStream(newPath? +? "/"? +? ?????????????????????????? (temp.getName()).toString());? ?????????????????? byte[]? b? =? new? byte[1024? *? 5];? ?????????????????? int? len;? ?????????????????? while? (? (len? =? input.read(b))? !=? -1)? {? ?????????????????????? output.write(b,? 0,? len);? ?????????????????? }? ?????????????????? output.flush();? ?????????????????? output.close();? ?????????????????? input.close();? ?????????????? }? ?????????????? if(temp.isDirectory()){//如果是子文件夾? ?????????????????? copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);? ?????????????? }? ?????????? }? ?????? }? ?????? catch? (Exception? e)? {? ?????????? System.out.println("復制整個文件夾內容操作出錯");? ?????????? e.printStackTrace();? ? ?????? }? ? ?? }? ? ?? /**? ???? *? @see 移動文件到指定目錄? ???? *? @param? oldPath? String? 如:c:/fqf.txt? ???? *? @param? newPath? String? 如:d:/fqf.txt? ???? */? ?? public? void? moveFile(String? oldPath,? String? newPath)? {? ?????? copyFile(oldPath,? newPath);? ?????? delFile(oldPath);? ? ?? }? ? ?? /**? ???? *? 移動文件到指定目錄? ???? *? @param? oldPath? String? 如:c:/fqf.txt? ???? *? @param? newPath? String? 如:d:/fqf.txt? ???? */? ?? public? void? moveFolder(String? oldPath,? String? newPath)? {? ?????? copyFolder(oldPath,? newPath);? ?????? delFolder(oldPath);? ? ?? }? ?? ?? /**? ??? * @see 獲得系統根目錄絕對路徑? ??? * @return String? ??? *??? ??? */ ?? public String getPath(){
? String sysPath = this.getClass().getResource("/").getPath(); ???? //對路徑進行修改 ? sysPath = sysPath.substring(1, sysPath.length() - 16); ? return? sysPath; ??? ?? }
|