1. 程式人生 > >java檔案讀寫I/O

java檔案讀寫I/O

寫和讀檔案:
    import java.io.*;
    public class fileStreamTest2{
      public static void main(String[] args) throws IOException {
        
        File f = new File("a.txt");
        // 構建FileOutputStream物件,檔案不存在會自動新建
        FileOutputStream fop = new FileOutputStream(f);
        
        // 構建OutputStreamWriter物件,引數可以指定編碼,預設為作業系統預設編碼,windows上是gbk
        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
        
        // 寫入到緩衝區
        writer.append("中文輸入");
        
        //換行
        writer.append("\r\n");
        
        // 重新整理快取衝,寫入到檔案,如果下面已經沒有寫入的內容了,直接close也會寫入
        writer.append("English");
        
        //關閉寫入流,同時會把緩衝區內容寫入檔案,所以上面的註釋掉
        writer.close();
        
        // 關閉輸出流,釋放系統資源
        fop.close();
     
        // 構建FileInputStream物件
        FileInputStream fip = new FileInputStream(f);
        
        // 構建InputStreamReader物件,編碼與寫入相同
        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
     
        StringBuffer sb = new StringBuffer();
        while (reader.ready()) {
          // 轉成char加到StringBuffer物件中
          sb.append((char) reader.read());
        }
        System.out.println(sb.toString());
        // 關閉讀取流
        reader.close();
        
        // 關閉輸入流,釋放系統資源
        fip.close();
     
      }
    }

建立檔案:
    import java.io.File;
    public class CreateDir {
      public static void main(String args[]) {
        String dirname = "/tmp/user/java/bin";
        File d = new File(dirname);
        // 現在建立目錄
        d.mkdirs();
      }
    }
    
判斷檔案是否是目錄:isDirectory()
    import java.io.File;     
    public class DirList {
      public static void main(String args[]) {
        String dirname = "/tmp";
        File f1 = new File(dirname);
        if (f1.isDirectory()) {
          System.out.println( "目錄 " + dirname);
          String s[] = f1.list();
          for (int i=0; i < s.length; i++) {
            File f = new File(dirname + "/" + s[i]);
            if (f.isDirectory()) {
              System.out.println(s[i] + " 是一個目錄");
            } else {
              System.out.println(s[i] + " 是一個檔案");
            }
          }
        } else {
          System.out.println(dirname + " 不是一個目錄");
        }
      }
    }
    
刪除目錄或檔案
    import java.io.File;
    public class DeleteFileDemo {
      public static void main(String args[]) {
          // 這裡修改為自己的測試目錄
        File folder = new File("/tmp/java/");
        deleteFolder(folder);
      }
      //刪除檔案及目錄
      public static void deleteFolder(File folder) {
        File[] files = folder.listFiles();
            if(files!=null) { 
                for(File f: files) {
                    if(f.isDirectory()) {
                        deleteFolder(f);
                    } else {
                        f.delete();
                    }
                }
            }
            folder.delete();
        }
    }

 

檔案上傳的三種方式

方式一:
    
/*
     * 通過流的方式上傳檔案
     * @RequestParam("file") 將name=file控制元件得到的檔案封裝成CommonsMultipartFile 物件
     */
    @RequestMapping("fileUpload")
    public String  fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException {
         
         
        //用來檢測程式執行時間
        long  startTime=System.currentTimeMillis();
        System.out.println("fileName:"+file.getOriginalFilename());
         
        try {
            //獲取輸出流
            OutputStream os=new FileOutputStream("E:/"+new Date().getTime()+file.getOriginalFilename());
            //獲取輸入流 CommonsMultipartFile 中可以直接得到檔案的流
            InputStream is=file.getInputStream();
            int temp;
            //一個一個位元組的讀取並寫入
            while((temp=is.read())!=(-1))
            {
                os.write(temp);
            }
           os.flush();
           os.close();
           is.close();
         
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        long  endTime=System.currentTimeMillis();
        System.out.println("方法一的執行時間:"+String.valueOf(endTime-startTime)+"ms");
        return "/success"; 
    }

 方式二:
    
/*
     * 採用file.Transto 來儲存上傳的檔案
     */
    @RequestMapping("fileUpload2")
    public String  fileUpload2(@RequestParam("file") CommonsMultipartFile file) throws IOException {
         long  startTime=System.currentTimeMillis();
        System.out.println("fileName:"+file.getOriginalFilename());
        String path="E:/"+new Date().getTime()+file.getOriginalFilename();
         
        File newFile=new File(path);
        //通過CommonsMultipartFile的方法直接寫檔案(注意這個時候)
        file.transferTo(newFile);
        long  endTime=System.currentTimeMillis();
        System.out.println("方法二的執行時間:"+String.valueOf(endTime-startTime)+"ms");
        return "/success"; 
    }

 

 方式三:
    
/*
     *採用spring提供的上傳檔案的方法
     */
    @RequestMapping("springUpload")
    public String  springUpload(HttpServletRequest request) throws IllegalStateException, IOException
    {
         long  startTime=System.currentTimeMillis();
         //將當前上下文初始化給  CommonsMutipartResolver (多部分解析器)
        CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
                request.getSession().getServletContext());
        //檢查form中是否有enctype="multipart/form-data"
        if(multipartResolver.isMultipart(request))
        {
            //將request變成多部分request
            MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
           //獲取multiRequest 中所有的檔名
            Iterator iter=multiRequest.getFileNames();
             
            while(iter.hasNext())
            {
                //一次遍歷所有檔案
                MultipartFile file=multiRequest.getFile(iter.next().toString());
                if(file!=null)
                {
                    String path="E:/springUpload"+file.getOriginalFilename();
                    //上傳
                    file.transferTo(new File(path));
                }
                 
            }
           
        }
        long  endTime=System.currentTimeMillis();
        System.out.println("方法三的執行時間:"+String.valueOf(endTime-startTime)+"ms");
    return "/success"; 
    }