Java基礎語法_Day20

一剧辐、File類
  • File概述

打開API,搜索File類洒忧。閱讀其描述:File文件和目錄路徑名的抽象表示形式。即够颠,Java中把文件或者目錄(文件夾)都封裝成File對象熙侍。也就是說如果我們要去操作硬盤上的文件,或者文件夾只要找到File這個類即可,那么我們就要研究研究File這個類中都有那些功能可以操作文件或者文件夾呢

  • File類的構造函數
  • File(String pathname) :將一個字符串路徑封裝成File對象
  • File(String parent,String child):傳入一個父級路徑和子級路徑
  • File(File parent,String child):傳入一個File類型的父級路徑和子級路徑
  • 案例代碼一:
package com.neuedu.demo;
import java.io.File;
/*
* File:文件和目錄路徑名的抽象表示形式履磨,F(xiàn)ile 類的實例是不可變的
*
* 構造方法:
*  File(File parent, String child)
*  File(String pathname)
*  File(String parent, String child)   
*/

public class FileDemo {
public static void main(String[] args) {
//File(String pathname) :將指定的路徑名轉換成一個File對象
//File f = new File("D:\\a\\b.txt");
//File(String parent, String child) : 根據指定的父路徑和文件路徑創(chuàng)建File對象
//File f2 = new File("D:\\a","b.txt");
//File(File parent, String child) :根據指定的父路徑對象和文件路徑創(chuàng)建File對象
//File parent = new File("D:\\a");
//File f3 = new File(parent,"b.txt");
File f4  = new File(new File("D:\\a"),"b.txt");
}
}
  • File類創(chuàng)建和刪除功能
  • boolean createNewFile():指定路徑不存在該文件時時創(chuàng)建文件,返回true,否則返回false
  • boolean mkdir():當指定的單級文件夾不存在時創(chuàng)建文件夾并返回true蛉抓,否則返回false
  • boolean mkdirs():當指定的多級文件夾某一級文件夾不存在時,創(chuàng)建多級文件夾并返回true,否則返回false
  • boolean delete():刪除文件或者刪除單級文件夾
  • 案例代碼二:
package com.neuedu.demo;

import java.io.File;
import java.io.IOException;

/*
*     創(chuàng)建功能
*         boolean createNewFile()  
*         boolean mkdir()  
*         boolean mkdirs()  
*     刪除功能
*         boolean delete() 
* 
*  絕對路徑:固定不可改變的路徑,以盤符開頭
*  相對路徑:相對某個參照物剃诅,不能以盤符開頭
*         在eclipse中相對路徑相對應當前項目的根目錄
*  
*  
*  注意:刪除一個文件夾巷送,這個文件夾下面不能有其他的文件和文件夾

*/
public class FileDemo2 {
  public static void main(String[] args) throws IOException {
        File f = new File("d:\\a\\b.txt");//絕對路徑
        File f2 = new File("a.txt");//相對路徑
      
       //boolean createNewFile() : 當指定文件不存在時創(chuàng)建文件并返回true,否則返回false
       System.out.println(f2.createNewFile());
      
       
      //boolean mkdir()   : 當指定文件夾不存在時創(chuàng)建文件夾并返回true矛辕,否則返回false
      File f3 = new File("b");
      System.out.println(f3.mkdir());
      
      //boolean mkdirs() : 創(chuàng)建指定文件夾笑跛,當文件夾所在的目錄不存在,則順道一塊創(chuàng)建了
      File f4 = new File("c\\d\\e");
      System.out.println(f4.mkdir());
      System.out.println(f4.mkdirs());
      
      File f5 = new File("c.txt");
      System.out.println(f5.mkdir());
      
      //boolean delete() :當指定的文件或文件夾存在時刪除文件或者文件夾 并返回true聊品,否則返回false
      System.out.println(f2.delete());
      System.out.println(f3.delete());

      File f6 = new File("c");
      System.out.println(f6.delete());
      
  }
}
  • File類的判斷功能
  • boolean exists():判斷指定路徑的文件或文件夾是否存在
  • boolean isAbsolute():判斷當前路路徑是否是絕對路徑
  • boolean isDirectory():判斷當前的目錄是否存在
  • boolean isFile():判斷當前路徑是否是一個文件
  • boolean isHidden():判斷當前路徑是否是隱藏文件
  • 案例代碼三:
package com.neuedu.demo;
import java.io.File;
import java.io.IOException;

/*
* 判斷功能
*         boolean exists()  
*         boolean isAbsolute()  
*         boolean isDirectory() 
*     boolean isFile()  
*     boolean isHidden() 
*/
public class FileDemo3 {
  public static void main(String[] args) throws IOException {
      //method();
      //method2();
      //method3();
      
      method4();
      
  
  }

  private static void method4() {
      File f = new File("d:\\a\\b.txt");
      //boolean isHidden() :判斷File對象指向的路徑是否有隱藏屬性飞蹂,如果隱藏了則返回true,否則返回false
      
      System.out.println(f.isHidden());
  }

  private static void method3() {
      File f = new File("a.txt");
      File f2 = new File("b");
      //boolean isDirectory() :判斷File對象指向的路徑是否是文件夾杨刨,如果是則返回true晤柄,否則返回false
      //boolean isFile()  : 判斷File對象指向的路徑是否是文件,如果是則返回true妖胀,否則返回false
      
      //System.out.println(f.isDirectory());
      //System.out.println(f2.isDirectory());
      
      System.out.println(f.isFile());
      System.out.println(f2.isFile());
  }

  private static void method2() {
      //File f = new File("a.txt");
      File f2 = new File("d:\\a\b.txt");
      
      //boolean isAbsolute() :判斷File對象指向的路徑是否是絕對路徑,如果是絕對路徑則返回true惠勒,否則返回false
      System.out.println(f2.isAbsolute());
  }

  private static void method() {
      File f = new File("a.txt");
      //f.createNewFile();
      
      //boolean exists() : 判斷文件或者文件夾是否存在赚抡,如果存在則返回true,否則返回false
      System.out.println(f.exists());
  }
}
  • File類的獲取功能和修改名字功能
  • File getAbsoluteFile():獲取文件的絕對路徑,返回File對象
  • String getAbsolutePath():獲取文件的絕對路徑,返回路徑的字符串
  • String getParent():獲取當前路徑的父級路徑,以字符串形式返回該父級路徑
  • File getParentFile():獲取當前路徑的父級路徑,以字File對象形式返回該父級路徑
  • String getName():獲取文件或文件夾的名稱
  • String getPath():獲取File對象中封裝的路徑
  • long lastModified():以毫秒值返回最后修改時間
  • long length():返回文件的字節(jié)數
  • boolean renameTo(File dest): 將當前File對象所指向的路徑 修改為 指定File所指向的路徑
  • 案例代碼四:
 package com.neuedu.demo;

import java.io.File;
import java.io.IOException;

/*
* 獲取功能
*         File getAbsoluteFile()  
*         String getAbsolutePath() 
*         String getParent()  
*         File getParentFile() 
*         String getName() 
*         String getPath()  
*         long lastModified() 
*         long length() 
*     修改功能:
*         boolean renameTo(File dest)
*/
public class FileDemo4 {
  public static void main(String[] args) throws IOException  {
      //method();
      //method2();
      //method3();
      
      File f = new File("d.txt");
      File f2 = new File("e.txt");
      
      //boolean renameTo(File dest) : 將當前File對象所指向的路徑 修改為 指定File所指向的路徑
      //注意:修改的文件路徑不能存在纠屋,如果存在則修改失敗
      System.out.println(f.renameTo(f2));
  }

  private static void method3() {
      File f = new File("a.txt");
      File f2 = new File("d:\\a\\b.txt");
      File f3 = new File("b");
      
      //String getName() : 獲取文件和文件夾的名稱
      //System.out.println(f.getName());
      //System.out.println(f2.getName());
      //System.out.println(f3.getName());
      
      //String getPath() : 返回創(chuàng)建File對象時給的路徑
      //System.out.println(f.getPath());
      //System.out.println(f2.getPath());
      //System.out.println(f3.getPath());
      
      //long lastModified() : 以毫秒值的形式返回最后修改時間
      //System.out.println(f.lastModified());
      //2514023311294
      //Date d = new Date(2514023311294L);
      //System.out.println(d.toLocaleString());
      
      //long length() : 返回文件的字節(jié)數
      System.out.println(f.length());
      System.out.println(f3.length());
  }

  private static void method2() throws IOException {
      //File f = new File("a.txt");
      
      //File f2 = new File("b","c.txt");
      //System.out.println(f2.createNewFile());
      
      File parent = new File("b");
      File f3 = new File(parent,"c.txt");
      if(!parent.exists()) {
          parent.mkdirs();
      }
      System.out.println(f3.createNewFile());
      
      //String getParent() 
      System.out.println(f3.getParent());
      //File getParentFile() 
      System.out.println(f3.getParentFile());
  }

  private static void method() {
      File f = new File("d:\\a\\b.txt");
      File f2 = new File("a.txt");
      
      //File getAbsoluteFile()  :以File對象的形式返回當前File對象所有指向的絕對路徑
      System.out.println(f2.getAbsoluteFile());
      //String getAbsolutePath() : 返回File對象所指向的絕對路徑
      System.out.println(f2.getAbsolutePath());
  }
}
  • File類的其它獲取功能
  • String[] list():以字符串數組的形式返回當前路徑下所有的文件和文件夾的名稱
  • File[] listFiles():以File對象的形式返回當前路徑下所有的文件和文件夾的名稱
  • static File[] listRoots():獲取計算機中所有的盤符
  • 案例代碼五:
package com.neuedu.demo;
import java.io.File;

/*
*     String[] list() 
*     File[] listFiles() 
*     static File[] listRoots() 
*/
public class FileDemo5 {
  public static void main(String[] args)  {
      //method();
      //method2();
      
      //static File[] listRoots() :  返回的是所有盤符
      File[] files = File.listRoots();
      for (File file : files) {
          System.out.println(file);
      }
      
      
  }

  private static void method2() {
      File f = new File("b");
      File f2 = new File("D:\\workspace\\myFile");
      File f3 = new File("c.txt");
      
      //File[] listFiles()
      File[] files = f3.listFiles();
      for (File file : files) {
          System.out.println(file.getName());
      }
  }

  private static void method() {
      File f = new File("b");
      File f2 = new File("D:\\workspace\\myFile");
      File f3 = new File("c.txt");
      
      //String[] list() : 返回當前路徑下所有的文件和文件夾名稱
      //注意:只有指向文件夾的File對象才可以調用該方法
      String[] files = f3.list();
      for (int i = 0; i < files.length; i++) {
          System.out.println(files[i]);
      }
  }
}
  • File類兩個案例
  • 案例代碼六
    輸出指定目錄下所有的java文件名(包含子目錄)
package com.neuedu.demo;

import java.io.File;

/*
* 需求:輸出指定目錄下所有的java文件名(包含子目錄)
*/
public class RecurrenceTest {
  public static void main(String[] args) {
      File f = new File("src");
      //File f = new >File("src\\com\\itheima_01\\RecurrenceDemo.java");
      method(f);
  }
  
  public static void method(File file) {
      if(file.isDirectory()) {
          File[] files = file.listFiles();
          for (File f : files) {
              //判斷是否是文件對象
              if(f.isFile()) {
                  if(f.getName().endsWith(".java")) {
                      System.out.println(f.getName());
                  }
              }
              else if(f.isDirectory()){
                  //是一個目錄對象
                  method(f);
              }
          }
      }
  }
  
  
  //輸出指定目錄下的所有java文件名(不包含子目錄)
  public static void method2(File file) {
      if(file.isDirectory()) {
          File[] files = file.listFiles();
          for (File f : files) {
              //判斷是否是文件對象
              if(f.isFile()) {
                  if(f.getName().endsWith(".java")) {
                      System.out.println(f.getName());
                  }
              }
          }
      }
  }
}
  • 案例代碼七
    刪除指定的目錄(包含子目錄)
package com.neuedu.demo;
import java.io.File;
/*
* 需求:刪除指定的目錄(包含子目錄)
*
* 注意:如果要刪除一個目錄涂臣,則需要先刪除這個目錄下的所有子文件和子目錄
*
*/
public class RecurrenceTest2 {
public static void main(String[] args) {
File f = new File("d:\\a");
method(f);
}
//刪除指定目錄下所有文件和目錄
public static void method(File file) {
if(file.isDirectory()) {
//干掉自己所有的子文件和子目錄
//獲取所有的子文件和子目錄
File[] files = file.listFiles();
for (File f : files) {
if(f.isFile()) {
//直接干掉他
System.out.println(f.getName());
f.delete();
}
else if(f.isDirectory()) {
//繼續(xù)查看是否還有文件和子目錄
method(f);
}
}
//干掉自己
System.out.println(file.getName());
file.delete();
}
}
}
二、字符流與字節(jié)流
  • 概述
  • IO流分類:
    • 流向
      輸入流 讀取數據 FileReader Reader
      輸出流 寫出數據 FileWriter Writer
    • 數據類型
      字節(jié)流
      字節(jié)輸入流 讀取數據 InputStream
      字節(jié)輸出流 寫出數據 OutputStream
      字符流
      字符輸入流 讀取數據 Reader
      字符輸出流 寫出數據 Writer
  • 利用字符流復制文本文件

利用字符流將當前工程下的IODemo.java拷貝到d盤的a文件夾下

  • 案例代碼八:
package com.neuedu.demo;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/*
* 使用字符流復制文本文件
* 
* 數據源     IODemo.java
* 目的地     d:\\IODemo.java
*     
*/
public class FileCopyDemo {
  public static void main(String[] args) throws IOException  {
      //創(chuàng)建字符輸入流對象
      FileReader fr = new FileReader("IODemo.java");
      //創(chuàng)建字符輸出流對象
      FileWriter fw = new FileWriter("d:\\IODemo.java");
      
      //一次讀寫一個字符
      
      /*int ch;
      while((ch = fr.read()) != -1) {
          fw.write(ch);
          fw.flush();
      }*/
      
      //一次讀寫一個字符數組
      int len;//用于存儲讀到的字符個數
      char[] chs = new char[1024];
      while((len = fr.read(chs)) != -1) {
          fw.write(chs,0,len);
          fw.flush();
      }
  
      //釋放資源
      fw.close();
      fr.close();
  }
}
  • 利用字節(jié)流復制文本文件

利用字節(jié)流將當前工程下的IODemo.java拷貝到d盤下

  • 案例代碼九:
package com.neuedu.demo;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* 使用字節(jié)流復制文本文件
*
* 數據源 IODemo.java
* 目的地 d:\\a\\IODemo.java
*/

public class FileCopyDemo {
public static void main(String[] args) throws IOException {
//創(chuàng)建字節(jié)輸入流對象
FileInputStream fis = new FileInputStream("IODemo.java");

//創(chuàng)建字節(jié)輸出流對象
FileOutputStream fos = new FileOutputStream("d:\\a\\IODemo.java");

//一次讀寫一個字節(jié)
/*int by;
while((by = fis.read()) != -1) {
fos.write(by);
}*/

//一次讀寫一個字節(jié)數組
int len;//存儲讀到的字節(jié)個數
byte [] bys = new byte [1024];
while ((len = fis.read(bys)) != -1) {
fos.write(bys,0,len);
}

//釋放資源
fos.close();
fis.close();
}
}
  • 復制圖片

字節(jié)流可以操作所有類型的文件,因為所有的文件在計算機中都是以字節(jié)形式存儲
而字符流只能用來操作純文本類型的文件,不能操作字節(jié)類型的文件

  • 案例代碼十:
package com.neuedu.demo;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/*
* 分別使用字符流和字節(jié)流復制圖片
* 
* 二進制文件只能使用字節(jié)流進行復制(使用windows自帶記事本打開讀不懂的)
* 文本文件的復制即可使用字符流,也可以使用字節(jié)流
* 
*/
public class CopyImage {
  public static void main(String[] args) throws IOException  {
      //method();
      
      //創(chuàng)建字節(jié)輸入流對象
      FileInputStream fis = new FileInputStream("傳智學院.jpg");
      //創(chuàng)建字節(jié)輸出流對象
      FileOutputStream fos = new FileOutputStream("d:\\傳智學院.jpg");
      
      //一次讀寫一個字節(jié)數組
      int len;//用于存儲讀到的字節(jié)個數
      byte[] bys = new byte[1024];
      while((len = fis.read(bys)) != -1) {
          fos.write(bys,0,len);
      }
      
      //釋放資源
      fos.close();
      fis.close();
  }

  private static void method() throws FileNotFoundException, IOException {
      //創(chuàng)建字符輸入流對象
      FileReader fr = new FileReader("傳智學院.jpg");
      //創(chuàng)建字符輸出流對象
      FileWriter fw = new FileWriter("d:\\傳智學院.jpg");
      
      //一次讀寫一個字符數組
      int len;//用于存儲讀到的字符個數
      char[] chs = new char[1024];
      while((len = fr.read(chs)) != -1) {
          fw.write(chs,0,len);
          fw.flush();
      }
      
      //釋放資源
      fw.close();
      fr.close();
  }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赁遗,一起剝皮案震驚了整個濱河市署辉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岩四,老刑警劉巖哭尝,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異剖煌,居然都是意外死亡材鹦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門耕姊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桶唐,“玉大人,你說我怎么就攤上這事茉兰∮仍螅” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵规脸,是天一觀的道長坯约。 經常有香客問我,道長燃辖,這世上最難降的妖魔是什么鬼店? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮黔龟,結果婚禮上妇智,老公的妹妹穿的比我還像新娘。我一直安慰自己氏身,他們只是感情好巍棱,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛋欣,像睡著了一般航徙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陷虎,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天到踏,我揣著相機與錄音,去河邊找鬼尚猿。 笑死窝稿,一個胖子當著我的面吹牛,可吹牛的內容都是我干的凿掂。 我是一名探鬼主播伴榔,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了踪少?” 一聲冷哼從身側響起塘安,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎援奢,沒想到半個月后兼犯,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡萝究,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年免都,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帆竹。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡绕娘,死狀恐怖,靈堂內的尸體忽然破棺而出栽连,到底是詐尸還是另有隱情险领,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布秒紧,位于F島的核電站绢陌,受9級特大地震影響,放射性物質發(fā)生泄漏熔恢。R本人自食惡果不足惜脐湾,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叙淌。 院中可真熱鬧秤掌,春花似錦、人聲如沸鹰霍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茂洒。三九已至孟岛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間督勺,已是汗流浹背渠羞。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留智哀,地道東北人堵未。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像盏触,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內容