Java基礎知識(六)

\color{#3299CC}{\huge{File\quad\&\quad遞歸\quad\&\quad字節(jié)流}}

一、File類

1.1File類概述和構造方法【應用】

  • File類介紹

    • 它是文件和目錄路徑名的抽象表示
    • 文件和目錄是可以通過File封裝成對象的
    • 對于File而言沛贪,其封裝的并不是一個真正存在的文件怕午,僅僅是一個路徑名而已废登。它可以是存在的,也可以是不存在的郁惜。將來是要通過具體的操作把這個路徑的內(nèi)容轉換為具體存在的
  • File類的構造方法

    方法名 說明
    File(String pathname) 通過將給定的路徑名字符串轉換為抽象路徑名來創(chuàng)建新的 File實例
    File(String parent, String child) 從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File實例
    File(File parent, String child) 從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File實例
  • 示例代碼

    public class FileDemo01 {
        public static void main(String[] args) {
            //File(String pathname):通過將給定的路徑名字符串轉換為抽象路徑名來創(chuàng)建新的 File實例堡距。
            File f1 = new File("E:\\itcast\\java.txt");
            System.out.println(f1);
    
            //File(String parent, String child):從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File實例。
            File f2 = new File("E:\\itcast","java.txt");
            System.out.println(f2);
    
            //File(File parent, String child):從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File實例兆蕉。
            File f3 = new File("E:\\itcast");
            File f4 = new File(f3,"java.txt");
            System.out.println(f4);
        }
    }
    

1.2File類創(chuàng)建功能【應用】

  • 方法分類

    方法名 說明
    public boolean createNewFile() 當具有該名稱的文件不存在時羽戒,創(chuàng)建一個由該抽象路徑名命名的新空文件
    public boolean mkdir() 創(chuàng)建由此抽象路徑名命名的目錄
    public boolean mkdirs() 創(chuàng)建由此抽象路徑名命名的目錄,包括任何必需但不存在的父目錄
  • 示例代碼

    public class FileDemo02 {
        public static void main(String[] args) throws IOException {
            //需求1:我要在E:\\itcast目錄下創(chuàng)建一個文件java.txt
            File f1 = new File("E:\\itcast\\java.txt");
            System.out.println(f1.createNewFile());
            System.out.println("--------");
    
            //需求2:我要在E:\\itcast目錄下創(chuàng)建一個目錄JavaSE
            File f2 = new File("E:\\itcast\\JavaSE");
            System.out.println(f2.mkdir());
            System.out.println("--------");
    
            //需求3:我要在E:\\itcast目錄下創(chuàng)建一個多級目錄JavaWEB\\HTML
            File f3 = new File("E:\\itcast\\JavaWEB\\HTML");
    //        System.out.println(f3.mkdir());
            System.out.println(f3.mkdirs());
            System.out.println("--------");
    
            //需求4:我要在E:\\itcast目錄下創(chuàng)建一個文件javase.txt
            File f4 = new File("E:\\itcast\\javase.txt");
    //        System.out.println(f4.mkdir());
            System.out.println(f4.createNewFile());
        }
    }
    

1.3File類判斷和獲取功能【應用】

  • 判斷功能

    方法名 說明
    public boolean isDirectory() 測試此抽象路徑名表示的File是否為目錄
    public boolean isFile() 測試此抽象路徑名表示的File是否為文件
    public boolean exists() 測試此抽象路徑名表示的File是否存在
  • 獲取功能

    方法名 說明
    public String getAbsolutePath() 返回此抽象路徑名的絕對路徑名字符串
    public String getPath() 將此抽象路徑名轉換為路徑名字符串
    public String getName() 返回由此抽象路徑名表示的文件或目錄的名稱
    public String[] list() 返回此抽象路徑名表示的目錄中的文件和目錄的名稱字符串數(shù)組
    public File[] listFiles() 返回此抽象路徑名表示的目錄中的文件和目錄的File對象數(shù)組
  • 示例代碼

    public class FileDemo04 {
        public static void main(String[] args) {
            //創(chuàng)建一個File對象
            File f = new File("myFile\\java.txt");
    
    //        public boolean isDirectory():測試此抽象路徑名表示的File是否為目錄
    //        public boolean isFile():測試此抽象路徑名表示的File是否為文件
    //        public boolean exists():測試此抽象路徑名表示的File是否存在
            System.out.println(f.isDirectory());
            System.out.println(f.isFile());
            System.out.println(f.exists());
    
    //        public String getAbsolutePath():返回此抽象路徑名的絕對路徑名字符串
    //        public String getPath():將此抽象路徑名轉換為路徑名字符串
    //        public String getName():返回由此抽象路徑名表示的文件或目錄的名稱
            System.out.println(f.getAbsolutePath());
            System.out.println(f.getPath());
            System.out.println(f.getName());
            System.out.println("--------");
    
    //        public String[] list():返回此抽象路徑名表示的目錄中的文件和目錄的名稱字符串數(shù)組
    //        public File[] listFiles():返回此抽象路徑名表示的目錄中的文件和目錄的File對象數(shù)組
            File f2 = new File("E:\\itcast");
    
            String[] strArray = f2.list();
            for(String str : strArray) {
                System.out.println(str);
            }
            System.out.println("--------");
    
            File[] fileArray = f2.listFiles();
            for(File file : fileArray) {
    //            System.out.println(file);
    //            System.out.println(file.getName());
                if(file.isFile()) {
                    System.out.println(file.getName());
                }
            }
        }
    }
    

1.4File類刪除功能【應用】

  • 方法分類

    方法名 說明
    public boolean delete() 刪除由此抽象路徑名表示的文件或目錄
  • 示例代碼

    public class FileDemo03 {
        public static void main(String[] args) throws IOException {
    //        File f1 = new File("E:\\itcast\\java.txt");
            //需求1:在當前模塊目錄下創(chuàng)建java.txt文件
            File f1 = new File("myFile\\java.txt");
    //        System.out.println(f1.createNewFile());
    
            //需求2:刪除當前模塊目錄下的java.txt文件
            System.out.println(f1.delete());
            System.out.println("--------");
    
            //需求3:在當前模塊目錄下創(chuàng)建itcast目錄
            File f2 = new File("myFile\\itcast");
    //        System.out.println(f2.mkdir());
    
            //需求4:刪除當前模塊目錄下的itcast目錄
            System.out.println(f2.delete());
            System.out.println("--------");
    
            //需求5:在當前模塊下創(chuàng)建一個目錄itcast,然后在該目錄下創(chuàng)建一個文件java.txt
            File f3 = new File("myFile\\itcast");
    //        System.out.println(f3.mkdir());
            File f4 = new File("myFile\\itcast\\java.txt");
    //        System.out.println(f4.createNewFile());
    
            //需求6:刪除當前模塊下的目錄itcast
            System.out.println(f4.delete());
            System.out.println(f3.delete());
        }
    }
    
  • 絕對路徑和相對路徑的區(qū)別

    • 絕對路徑:完整的路徑名虎韵,不需要任何其他信息就可以定位它所表示的文件易稠。例如:E:\itcast\java.txt
    • 相對路徑:必須使用取自其他路徑名的信息進行解釋。例如:myFile\java.txt

二劝术、遞歸

2.1遞歸【應用】

  • 遞歸的介紹

    • 以編程的角度來看缩多,遞歸指的是方法定義中調(diào)用方法本身的現(xiàn)象
    • 把一個復雜的問題層層轉化為一個與原問題相似的規(guī)模較小的問題來求解
    • 遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算
  • 遞歸的基本使用

    public class DiGuiDemo {
        public static void main(String[] args) {
            //回顧不死神兔問題,求第20個月兔子的對數(shù)
            //每個月的兔子對數(shù):1,1,2,3,5,8养晋,...
            int[] arr = new int[20];
    
            arr[0] = 1;
            arr[1] = 1;
    
            for (int i = 2; i < arr.length; i++) {
                arr[i] = arr[i - 1] + arr[i - 2];
            }
            System.out.println(arr[19]);
            System.out.println(f(20));
        }
    
        /*
            遞歸解決問題衬吆,首先就是要定義一個方法:
                定義一個方法f(n):表示第n個月的兔子對數(shù)
                那么,第n-1個月的兔子對數(shù)該如何表示呢绳泉?f(n-1)
                同理逊抡,第n-2個月的兔子對數(shù)該如何表示呢?f(n-2)
    
            StackOverflowError:當堆棧溢出發(fā)生時拋出一個應用程序遞歸太深
         */
        public static int f(int n) {
            if(n==1 || n==2) {
                return 1;
            } else {
                return f(n - 1) + f(n - 2);
            }
        }
    }
    
  • 遞歸的注意事項

    • 遞歸一定要有出口零酪。否則內(nèi)存溢出
    • 遞歸雖然有出口冒嫡,但是遞歸的次數(shù)也不宜過多。否則內(nèi)存溢出

2.2遞歸求階乘【應用】

  • 案例需求

    ? 用遞歸求5的階乘四苇,并把結果在控制臺輸出

  • 代碼實現(xiàn)

    public class DiGuiDemo01 {
        public static void main(String[] args) {
            //調(diào)用方法
            int result = jc(5);
            //輸出結果
            System.out.println("5的階乘是:" + result);
        }
    
        //定義一個方法孝凌,用于遞歸求階乘,參數(shù)為一個int類型的變量
        public static int jc(int n) {
            //在方法內(nèi)部判斷該變量的值是否是1
            if(n == 1) {
                //是:返回1
                return 1;
            } else {
                //不是:返回n*(n-1)!
                return n*jc(n-1);
            }
        }
    }
    

2.3遞歸遍歷目錄【應用】

  • 案例需求

    ? 給定一個路徑(E:\itcast)月腋,通過遞歸完成遍歷該目錄下所有內(nèi)容蟀架,并把所有文件的絕對路徑輸出在控制臺

  • 代碼實現(xiàn)

    public class DiGuiDemo02 {
        public static void main(String[] args) {
            //根據(jù)給定的路徑創(chuàng)建一個File對象
    //        File srcFile = new File("E:\\itcast");
            File srcFile = new File("E:\\itheima");
    
            //調(diào)用方法
            getAllFilePath(srcFile);
        }
    
        //定義一個方法,用于獲取給定目錄下的所有內(nèi)容榆骚,參數(shù)為第1步創(chuàng)建的File對象
        public static void getAllFilePath(File srcFile) {
            //獲取給定的File目錄下所有的文件或者目錄的File數(shù)組
            File[] fileArray = srcFile.listFiles();
            //遍歷該File數(shù)組片拍,得到每一個File對象
            if(fileArray != null) {
                for(File file : fileArray) {
                    //判斷該File對象是否是目錄
                    if(file.isDirectory()) {
                        //是:遞歸調(diào)用
                        getAllFilePath(file);
                    } else {
                        //不是:獲取絕對路徑輸出在控制臺
                        System.out.println(file.getAbsolutePath());
                    }
                }
            }
        }
    }
    

三、IO流

3.1 IO流概述和分類【理解】

  • IO流介紹
    • IO:輸入/輸出(Input/Output)
    • 流:是一種抽象概念妓肢,是對數(shù)據(jù)傳輸?shù)目偡Q捌省。也就是說數(shù)據(jù)在設備間的傳輸稱為流,流的本質(zhì)是數(shù)據(jù)傳輸
    • IO流就是用來處理設備間數(shù)據(jù)傳輸問題的碉钠。常見的應用:文件復制纲缓;文件上傳卷拘;文件下載
  • IO流的分類
    • 按照數(shù)據(jù)的流向
      • 輸入流:讀數(shù)據(jù)
      • 輸出流:寫數(shù)據(jù)
    • 按照數(shù)據(jù)類型來分
      • 字節(jié)流
        • 字節(jié)輸入流
        • 字節(jié)輸出流
      • 字符流
        • 字符輸入流
        • 字符輸出流
  • IO流的使用場景
    • 如果操作的是純文本文件,優(yōu)先使用字符流
    • 如果操作的是圖片色徘、視頻恭金、音頻等二進制文件操禀。優(yōu)先使用字節(jié)流
    • 如果不確定文件類型褂策,優(yōu)先使用字節(jié)流。字節(jié)流是萬能的流

3.2字節(jié)流寫數(shù)據(jù)【應用】

  • 字節(jié)流抽象基類

    • InputStream:這個抽象類是表示字節(jié)輸入流的所有類的超類
    • OutputStream:這個抽象類是表示字節(jié)輸出流的所有類的超類
    • 子類名特點:子類名稱都是以其父類名作為子類名的后綴
  • 字節(jié)輸出流

    • FileOutputStream(String name):創(chuàng)建文件輸出流以指定的名稱寫入文件
  • 使用字節(jié)輸出流寫數(shù)據(jù)的步驟

    • 創(chuàng)建字節(jié)輸出流對象(調(diào)用系統(tǒng)功能創(chuàng)建了文件颓屑,創(chuàng)建字節(jié)輸出流對象斤寂,讓字節(jié)輸出流對象指向文件)
    • 調(diào)用字節(jié)輸出流對象的寫數(shù)據(jù)方法
    • 釋放資源(關閉此文件輸出流并釋放與此流相關聯(lián)的任何系統(tǒng)資源)
  • 示例代碼

    public class FileOutputStreamDemo01 {
        public static void main(String[] args) throws IOException {
            //創(chuàng)建字節(jié)輸出流對象
            //FileOutputStream(String name):創(chuàng)建文件輸出流以指定的名稱寫入文件
            FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");
            /*
                做了三件事情:
                    A:調(diào)用系統(tǒng)功能創(chuàng)建了文件
                    B:創(chuàng)建了字節(jié)輸出流對象
                    C:讓字節(jié)輸出流對象指向創(chuàng)建好的文件
             */
    
            //void write(int b):將指定的字節(jié)寫入此文件輸出流
            fos.write(97);
    //        fos.write(57);
    //        fos.write(55);
    
            //最后都要釋放資源
            //void close():關閉此文件輸出流并釋放與此流相關聯(lián)的任何系統(tǒng)資源。
            fos.close();
        }
    }
    

3.3字節(jié)流寫數(shù)據(jù)的三種方式【應用】

  • 寫數(shù)據(jù)的方法分類

    方法名 說明
    void write(int b) 將指定的字節(jié)寫入此文件輸出流 一次寫一個字節(jié)數(shù)據(jù)
    void write(byte[] b) 將 b.length字節(jié)從指定的字節(jié)數(shù)組寫入此文件輸出流 一次寫一個字節(jié)數(shù)組數(shù)據(jù)
    void write(byte[] b, int off, int len) 將 len字節(jié)從指定的字節(jié)數(shù)組開始揪惦,從偏移量off開始寫入此文件輸出流 一次寫一個字節(jié)數(shù)組的部分數(shù)據(jù)
  • 示例代碼

    public class FileOutputStreamDemo02 {
        public static void main(String[] args) throws IOException {
            //FileOutputStream(String name):創(chuàng)建文件輸出流以指定的名稱寫入文件
            FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");
            //new File(name)
    //        FileOutputStream fos = new FileOutputStream(new File("myByteStream\\fos.txt"));
    
            //FileOutputStream(File file):創(chuàng)建文件輸出流以寫入由指定的 File對象表示的文件
    //        File file = new File("myByteStream\\fos.txt");
    //        FileOutputStream fos2 = new FileOutputStream(file);
    //        FileOutputStream fos2 = new FileOutputStream(new File("myByteStream\\fos.txt"));
    
            //void write(int b):將指定的字節(jié)寫入此文件輸出流
    //        fos.write(97);
    //        fos.write(98);
    //        fos.write(99);
    //        fos.write(100);
    //        fos.write(101);
    
    //        void write(byte[] b):將 b.length字節(jié)從指定的字節(jié)數(shù)組寫入此文件輸出流
    //        byte[] bys = {97, 98, 99, 100, 101};
            //byte[] getBytes():返回字符串對應的字節(jié)數(shù)組
            byte[] bys = "abcde".getBytes();
    //        fos.write(bys);
    
            //void write(byte[] b, int off, int len):將 len字節(jié)從指定的字節(jié)數(shù)組開始遍搞,從偏移量off開始寫入此文件輸出流
    //        fos.write(bys,0,bys.length);
            fos.write(bys,1,3);
    
            //釋放資源
            fos.close();
        }
    }
    

3.4字節(jié)流寫數(shù)據(jù)的兩個小問題【應用】

  • 字節(jié)流寫數(shù)據(jù)如何實現(xiàn)換行

    • windows:\r\n
    • linux:\n
    • mac:\r
  • 字節(jié)流寫數(shù)據(jù)如何實現(xiàn)追加寫入

    • public FileOutputStream(String name,boolean append)
    • 創(chuàng)建文件輸出流以指定的名稱寫入文件。如果第二個參數(shù)為true 器腋,則字節(jié)將寫入文件的末尾而不是開頭
  • 示例代碼

    public class FileOutputStreamDemo03 {
        public static void main(String[] args) throws IOException {
            //創(chuàng)建字節(jié)輸出流對象
    //        FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt");
            FileOutputStream fos = new FileOutputStream("myByteStream\\fos.txt",true);
    
            //寫數(shù)據(jù)
            for (int i = 0; i < 10; i++) {
                fos.write("hello".getBytes());
                fos.write("\r\n".getBytes());
            }
    
            //釋放資源
            fos.close();
        }
    }
    

3.5字節(jié)流寫數(shù)據(jù)加異常處理【應用】

  • 異常處理格式

    • try-catch-finally

      try{
          可能出現(xiàn)異常的代碼;
      }catch(異常類名 變量名){
          異常的處理代碼;
      }finally{
          執(zhí)行所有清除操作;
      }
      
    • finally特點

      • 被finally控制的語句一定會執(zhí)行溪猿,除非JVM退出
  • 示例代碼

    public class FileOutputStreamDemo04 {
        public static void main(String[] args) {
            //加入finally來實現(xiàn)釋放資源
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream("myByteStream\\fos.txt");
                fos.write("hello".getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(fos != null) {
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

3.6字節(jié)流讀數(shù)據(jù)(一次讀一個字節(jié)數(shù)據(jù))【應用】

  • 字節(jié)輸入流

    • FileInputStream(String name):通過打開與實際文件的連接來創(chuàng)建一個FileInputStream ,該文件由文件系統(tǒng)中的路徑名name命名
  • 字節(jié)輸入流讀取數(shù)據(jù)的步驟

    • 創(chuàng)建字節(jié)輸入流對象
    • 調(diào)用字節(jié)輸入流對象的讀數(shù)據(jù)方法
    • 釋放資源
  • 示例代碼

    public class FileInputStreamDemo01 {
        public static void main(String[] args) throws IOException {
            //創(chuàng)建字節(jié)輸入流對象
            //FileInputStream(String name)
            FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");
    
            int by;
            /*
                fis.read():讀數(shù)據(jù)
                by=fis.read():把讀取到的數(shù)據(jù)賦值給by
                by != -1:判斷讀取到的數(shù)據(jù)是否是-1
             */
            while ((by=fis.read())!=-1) {
                System.out.print((char)by);
            }
    
            //釋放資源
            fis.close();
        }
    }
    

3.7字節(jié)流復制文本文件【應用】

  • 案例需求

    ? 把“E:\itcast\窗里窗外.txt”復制到模塊目錄下的“窗里窗外.txt”

  • 實現(xiàn)步驟

    • 復制文本文件纫塌,其實就把文本文件的內(nèi)容從一個文件中讀取出來(數(shù)據(jù)源)诊县,然后寫入到另一個文件中(目的地)

    • 數(shù)據(jù)源:

      ? E:\itcast\窗里窗外.txt --- 讀數(shù)據(jù) --- InputStream --- FileInputStream

    • 目的地:

      ? myByteStream\窗里窗外.txt --- 寫數(shù)據(jù) --- OutputStream --- FileOutputStream

  • 代碼實現(xiàn)

    public class CopyTxtDemo {
        public static void main(String[] args) throws IOException {
            //根據(jù)數(shù)據(jù)源創(chuàng)建字節(jié)輸入流對象
            FileInputStream fis = new FileInputStream("E:\\itcast\\窗里窗外.txt");
            //根據(jù)目的地創(chuàng)建字節(jié)輸出流對象
            FileOutputStream fos = new FileOutputStream("myByteStream\\窗里窗外.txt");
    
            //讀寫數(shù)據(jù),復制文本文件(一次讀取一個字節(jié)措左,一次寫入一個字節(jié))
            int by;
            while ((by=fis.read())!=-1) {
                fos.write(by);
            }
    
            //釋放資源
            fos.close();
            fis.close();
        }
    }
    

3.8字節(jié)流讀數(shù)據(jù)(一次讀一個字節(jié)數(shù)組數(shù)據(jù))【應用】

  • 一次讀一個字節(jié)數(shù)組的方法

    • public int read(byte[] b):從輸入流讀取最多b.length個字節(jié)的數(shù)據(jù)
    • 返回的是讀入緩沖區(qū)的總字節(jié)數(shù),也就是實際的讀取字節(jié)個數(shù)
  • 示例代碼

    public class FileInputStreamDemo02 {
        public static void main(String[] args) throws IOException {
            //創(chuàng)建字節(jié)輸入流對象
            FileInputStream fis = new FileInputStream("myByteStream\\fos.txt");
    
            /*
                hello\r\n
                world\r\n
    
                第一次:hello
                第二次:\r\nwor
                第三次:ld\r\nr
    
             */
    
            byte[] bys = new byte[1024]; //1024及其整數(shù)倍
            int len;
            while ((len=fis.read(bys))!=-1) {
                System.out.print(new String(bys,0,len));
            }
    
            //釋放資源
            fis.close();
        }
    }
    

3.9字節(jié)流復制圖片【應用】

  • 案例需求

    ? 把“E:\itcast\mn.jpg”復制到模塊目錄下的“mn.jpg”

  • 實現(xiàn)步驟

    • 根據(jù)數(shù)據(jù)源創(chuàng)建字節(jié)輸入流對象
    • 根據(jù)目的地創(chuàng)建字節(jié)輸出流對象
    • 讀寫數(shù)據(jù)依痊,復制圖片(一次讀取一個字節(jié)數(shù)組,一次寫入一個字節(jié)數(shù)組)
    • 釋放資源
  • 代碼實現(xiàn)

    public class CopyJpgDemo {
        public static void main(String[] args) throws IOException {
            //根據(jù)數(shù)據(jù)源創(chuàng)建字節(jié)輸入流對象
            FileInputStream fis = new FileInputStream("E:\\itcast\\mn.jpg");
            //根據(jù)目的地創(chuàng)建字節(jié)輸出流對象
            FileOutputStream fos = new FileOutputStream("myByteStream\\mn.jpg");
    
            //讀寫數(shù)據(jù)怎披,復制圖片(一次讀取一個字節(jié)數(shù)組胸嘁,一次寫入一個字節(jié)數(shù)組)
            byte[] bys = new byte[1024];
            int len;
            while ((len=fis.read(bys))!=-1) {
                fos.write(bys,0,len);
            }
    
            //釋放資源
            fos.close();
            fis.close();
        }
    }
    
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凉逛,隨后出現(xiàn)的幾起案子性宏,更是在濱河造成了極大的恐慌,老刑警劉巖状飞,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毫胜,死亡現(xiàn)場離奇詭異,居然都是意外死亡昔瞧,警方通過查閱死者的電腦和手機指蚁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來自晰,“玉大人凝化,你說我怎么就攤上這事〕贶瘢” “怎么了搓劫?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵瞧哟,是天一觀的道長。 經(jīng)常有香客問我枪向,道長勤揩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任秘蛔,我火速辦了婚禮陨亡,結果婚禮上,老公的妹妹穿的比我還像新娘深员。我一直安慰自己负蠕,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布倦畅。 她就那樣靜靜地躺著遮糖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叠赐。 梳的紋絲不亂的頭發(fā)上欲账,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音芭概,去河邊找鬼赛不。 笑死,一個胖子當著我的面吹牛谈山,可吹牛的內(nèi)容都是我干的俄删。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼奏路,長吁一口氣:“原來是場噩夢啊……” “哼畴椰!你這毒婦竟也來了?” 一聲冷哼從身側響起鸽粉,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斜脂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后触机,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帚戳,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年儡首,在試婚紗的時候發(fā)現(xiàn)自己被綠了片任。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔬胯,死狀恐怖对供,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤产场,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布鹅髓,位于F島的核電站,受9級特大地震影響京景,放射性物質(zhì)發(fā)生泄漏窿冯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一确徙、第九天 我趴在偏房一處隱蔽的房頂上張望醒串。 院中可真熱鬧,春花似錦米愿、人聲如沸厦凤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至椎木,卻和暖如春违柏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背香椎。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工漱竖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畜伐。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓馍惹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親玛界。 傳聞我的和親對象是個殘疾皇子万矾,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354