Java文件操作詳解

          輸入輸出流?
          在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;
          ???
          ?? }



          posted on 2006-08-04 09:23 nbt 閱讀(1474) 評論(3)  編輯  收藏 所屬分類: Java2SE相關

          評論

          # re: Java文件操作詳解 2006-12-06 16:01 1

          1  回復  更多評論   

          # re: Java文件操作詳解 2006-12-06 16:02 1

          泵盔啊   回復  更多評論   

          # re: Java文件操作詳解 2006-12-06 16:02 1

          2  回復  更多評論   

          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          Java技術網站

          友情鏈接

          國內一些開源網站

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜君县| 天台县| 陇西县| 华宁县| 略阳县| 峨山| 达尔| 平邑县| 甘孜| 沂南县| 隆子县| 柳州市| 南郑县| 浦江县| 浮梁县| 安义县| 伽师县| 凤阳县| 乐安县| 泰顺县| 广饶县| 金坛市| 手游| 岳普湖县| 东乌珠穆沁旗| 南和县| 邯郸县| 清涧县| 阳谷县| 贵南县| 英山县| 喀喇沁旗| 陇川县| 黎川县| 青铜峡市| 宾川县| 岢岚县| 惠水县| 阿克陶县| 垦利县| 名山县|