天天看點

Java學習筆記——File類之檔案管理和讀寫操作、下載下傳圖檔

Java學習筆記——File類之檔案管理和讀寫操作、下載下傳圖檔

File類的總結:

1.檔案和檔案夾的建立

2.檔案的讀取

3.檔案的寫入

4.檔案的複制(字元流、位元組流、處理流)

5.以圖檔位址下載下傳圖檔

檔案和檔案夾

相關函數

 (boolean) mkdir() 建立此抽象路徑名指定的目錄

 (boolean) mkdirs() 建立此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。

 (boolean) delete() 删除此抽象路徑名表示的檔案或目錄

 (boolean) createNewFile() 當不存在此路徑名指定名稱的檔案時,建立一個新的空檔案。

建立檔案

public static void NewFile(String pathString) {
    File file = new File(pathString);
    if (!file.exists()) {
      try {
        if (file.createNewFile()) {
          System.out.println("檔案建立成功");
        }
      } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
      }
    } else {
      System.out.println("檔案已存在");
    }
  }      

建立檔案夾

public static void NewFileBox(String pathString) {
    File file2 = new File(pathString);
    if (!file2.exists()) {
      if (file2.mkdirs()) {
        System.out.println("檔案夾成功");
      }
    } else {
      System.out.println("檔案夾存在");
      file2.delete();//銷毀檔案
    }
  }      

應用:

public static void main(String[] args) {
    NewFile("test/file.txt");
    NewFileBox("test/a/a/a/a");
  }      

Writer寫入檔案

用FileWriter寫入檔案

public  static void ForFileWriter(String string,String fileName) {
    File file = new File(fileName);
    try {
      FileWriter fWriter = new FileWriter(file);
      fWriter.write(string);
      fWriter.close();
    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
  }      

用BufferedWriter寫入檔案

public static void ForBufferedWriter(String string,String desFile) {
    BufferedWriter bWriter = null;
    try {
      bWriter = new BufferedWriter(new FileWriter(new File(desFile)));
      bWriter.write(string.toString());
      bWriter.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }      

public static void main(String[] args) {
    ForFileWriter("用FileWriter寫入檔案", "test/writer1.txt");
    ForBufferedWriter("用BufferedWriter寫入檔案", "test/writer2.txt");
  }      

Reader讀取檔案

用FileReader讀取檔案

public static void testReadByReader(String fileName){
    File file = new File(fileName);
    FileReader fis = null;
    try {
      fis =  new FileReader(file);
      char[] arr = new char[1024 * 1000 * 6];
      int len = fis.read(arr);
      String data = new String(arr, 0, len);
      fis.close();
      System.out.println(fileName+"中按FileReader讀取的檔案内容是:\n"+data);
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }      

用FileInputStream讀取檔案

public static void testReadByInputStream(String fileName){
    File file = new File(fileName);
    FileInputStream fis = null;
    try {
      fis =  new FileInputStream(file);
      byte[] arr = new byte[1024 * 1000 * 6];
      int len = fis.read(arr);
      String data = new String(arr, 0, len);
      fis.close();
      System.out.println(fileName+"中按FileInputStream讀取的檔案内容是:\n"+data);
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }      

用BufferedReader讀取檔案

public static void testReadByBufferedReader(String fileName) {
    BufferedReader bReader = null;
    String line = null;
    StringBuffer buffer = new StringBuffer();
    try {
      bReader =new BufferedReader(new FileReader(new File(fileName)));
      while ((line = bReader.readLine())!=null) {
        buffer.append(line).append("\n");
      }
    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
    System.out.println(fileName+"中按BufferedReader讀取的檔案内容是:\n"+buffer.toString());
  }      
public static void main(String[] args) {
    testReadByInputStream("res/我.txt");
    testReadByReader("res/我.txt");
    testReadByBufferedReader("res/我.txt");
  }      

檔案的複制操作

字元流複制

public static void FileCopy1(String readfile,String writeFile) {
    try {
      FileReader input = new FileReader(readfile);
      FileWriter output = new FileWriter(writeFile);
      int read = input.read();    
      while ( read != -1 ) {
        output.write(read); 
        read = input.read();
      }     
      input.close();
      output.close();
    } catch (IOException e) {
      System.out.println(e);
    }
  }      

位元組流複制

public static void FileCopy2(String readfile,String writeFile) {
    try {
      FileInputStream input = new FileInputStream(readfile);
      FileOutputStream output = new FileOutputStream(writeFile);
      int read = input.read();    
      while ( read != -1 ) {
        output.write(read); 
        read = input.read();
      }     
      input.close();
      output.close();
    } catch (IOException e) {
      System.out.println(e);
    }
  }      

處理流複制

public static void FileCopy3(String readfile,String writeFile) {
    BufferedReader bReader = null;
    BufferedWriter bWriter = null;
    String line = null; 
    try {
      bReader = new BufferedReader(new FileReader(new File(readfile)));
      bWriter = new BufferedWriter(new FileWriter(new File(writeFile)));
      while ((line = bReader.readLine())!=null) {
        bWriter.write(line);
        bWriter.newLine();
      }
      bWriter.close();
      bReader.close();
    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
  }      

public static void main(String[] args) {
    FileCopy1("res/我.txt", "test/1.txt");
    FileCopy2("res/我.txt", "test/2.txt");
    FileCopy3("res/我.txt", "test/3.txt");
    FileCopy2("res/me.jpg", "test/33.jpg");
  }      

以圖檔位址下載下傳圖檔

讀取給定圖檔檔案的内容,用FileInputStream

public static byte[] mReaderPicture(String filePath) {
    byte[] arr = null;
    try {
      File file = new File(filePath);
      FileInputStream fReader = new FileInputStream(file);
      arr = new byte[1024*100];
      fReader.read(arr);
    } catch (Exception  e) {
      // TODO: handle exception
      e.printStackTrace();
    }
    return arr;
  }      

根據byte數組,建立一張新圖。

public static void mWriterPicture(String newFileName,byte[] b){
    try {
      File file = new File(newFileName);
      FileOutputStream fStream = new FileOutputStream(file);
      fStream.write(b);
      fStream.close();
      System.out.println("圖檔建立成功    "+b.length);
    } catch (Exception e) {
      // TODO: handle exception
    }
  }      

擷取指定網址的圖檔,傳回其byte[]

public static byte[] mReaderPictureToInternet(String strUr1){
    byte[] imgData = null;
    URL url;
    try {
      url = new URL(strUr1);
      URLConnection connection = url.openConnection();
      int length = (int)connection.getContentLength();
      InputStream is = connection.getInputStream();
      if (length!=-1) {
        imgData = new byte[length];
        byte[] temp = new byte[500*1024];
        int readLen = 0;
        int destPos = 0;
        while ((readLen = is.read(temp))>0) {
          System.arraycopy(temp, 0, imgData, destPos, readLen);
          //arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 
          //從指定源數組中複制一個數組,複制從指定的位置開始,到目标數組的指定位置結束
          destPos+=readLen;
        }
      }
      return imgData;
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return imgData;
  }      

直接擷取指定網址的圖檔

public static void DownPictureToInternet(String filePath,String strUr1){
    try {
      URL url = new URL(strUr1);
      InputStream fStream = url.openConnection().getInputStream();
      int b = 0;
      FileOutputStream fos = new FileOutputStream(new File(filePath));
      while ((b=fStream.read())!=-1) {
        fos.write(b);
      }
      fStream.close();
      fos.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }      

public static void main(String[] args) {
    mWriterPicture("test/1.jpg", mReaderPicture("res/me.jpg"));
    mWriterPicture("test/2.jpg", mReaderPictureToInternet(
        "http://pic2.desk.chinaz.com/file/201209/7/qinghimingyue4_p.jpg"));
    DownPictureToInternet("test/下載下傳.jpg",
      "http://img3.100bt.com/upload/ttq/20130205/1360069663700.jpg");
  }