Java讀取文件方法匯總

這篇文章主要為大家詳細(xì)介紹了Java讀取文件方法,按字節(jié)讀取文件內(nèi)容、按字符讀取文件內(nèi)容硅蹦、隨機(jī)讀取文件內(nèi)容等,具有一定的參考價(jià)值闷煤,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java讀取文件的方法童芹,供大家參考,具體內(nèi)容如下

1鲤拿、按字節(jié)讀取文件內(nèi)容
2假褪、按字符讀取文件內(nèi)容
3、按行讀取文件內(nèi)容
4近顷、隨機(jī)讀取文件內(nèi)容

public class ReadFromFile {
  /**
   * 以字節(jié)為單位讀取文件生音,常用于讀二進(jìn)制文件,如圖片窒升、聲音缀遍、影像等文件。
   */
  public static void readFileByBytes(String fileName) {
    File file = new File(fileName);
    InputStream in = null;
    try {
      System.out.println("以字節(jié)為單位讀取文件內(nèi)容异剥,一次讀一個(gè)字節(jié):");
      // 一次讀一個(gè)字節(jié)
      in = new FileInputStream(file);
      int tempbyte;
      while ((tempbyte = in.read()) != -1) {
        System.out.write(tempbyte);
      }
      in.close();
    } catch (IOException e) {
      e.printStackTrace();
      return;
    }
    try {
      System.out.println("以字節(jié)為單位讀取文件內(nèi)容瑟由,一次讀多個(gè)字節(jié):");
      // 一次讀多個(gè)字節(jié)
      byte[] tempbytes = new byte[100];
      int byteread = 0;
      in = new FileInputStream(fileName);
      ReadFromFile.showAvailableBytes(in);
      // 讀入多個(gè)字節(jié)到字節(jié)數(shù)組中,byteread為一次讀入的字節(jié)數(shù)
      while ((byteread = in.read(tempbytes)) != -1) {
        System.out.write(tempbytes, 0, byteread);
      }
    } catch (Exception e1) {
      e1.printStackTrace();
    } finally {
      if (in != null) {
        try {
          in.close();
        } catch (IOException e1) {
        }
      }
    }
  }
 
  /**
   * 以字符為單位讀取文件冤寿,常用于讀文本歹苦,數(shù)字等類型的文件
   */
  public static void readFileByChars(String fileName) {
    File file = new File(fileName);
    Reader reader = null;
    try {
      System.out.println("以字符為單位讀取文件內(nèi)容,一次讀一個(gè)字節(jié):");
      // 一次讀一個(gè)字符
      reader = new InputStreamReader(new FileInputStream(file));
      int tempchar;
      while ((tempchar = reader.read()) != -1) {
        // 對(duì)于windows下督怜,\r\n這兩個(gè)字符在一起時(shí)殴瘦,表示一個(gè)換行。
        // 但如果這兩個(gè)字符分開顯示時(shí)号杠,會(huì)換兩次行蚪腋。
        // 因此,屏蔽掉\r姨蟋,或者屏蔽\n屉凯。否則,將會(huì)多出很多空行眼溶。
        if (((char) tempchar) != '\r') {
          System.out.print((char) tempchar);
        }
      }
      reader.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
    try {
      System.out.println("以字符為單位讀取文件內(nèi)容悠砚,一次讀多個(gè)字節(jié):");
      // 一次讀多個(gè)字符
      char[] tempchars = new char[30];
      int charread = 0;
      reader = new InputStreamReader(new FileInputStream(fileName));
      // 讀入多個(gè)字符到字符數(shù)組中,charread為一次讀取字符數(shù)
      while ((charread = reader.read(tempchars)) != -1) {
        // 同樣屏蔽掉\r不顯示
        if ((charread == tempchars.length)
            && (tempchars[tempchars.length - 1] != '\r')) {
          System.out.print(tempchars);
        } else {
          for (int i = 0; i < charread; i++) {
            if (tempchars[i] == '\r') {
              continue;
            } else {
              System.out.print(tempchars[i]);
            }
          }
        }
      }
 
    } catch (Exception e1) {
      e1.printStackTrace();
    } finally {
      if (reader != null) {
        try {
          reader.close();
        } catch (IOException e1) {
        }
      }
    }
  }
 
  /**
   * 以行為單位讀取文件堂飞,常用于讀面向行的格式化文件
   */
  public static void readFileByLines(String fileName) {
    File file = new File(fileName);
    BufferedReader reader = null;
    try {
      System.out.println("以行為單位讀取文件內(nèi)容灌旧,一次讀一整行:");
      reader = new BufferedReader(new FileReader(file));
      String tempString = null;
      int line = 1;
      // 一次讀入一行绑咱,直到讀入null為文件結(jié)束
      while ((tempString = reader.readLine()) != null) {
        // 顯示行號(hào)
        System.out.println("line " + line + ": " + tempString);
        line++;
      }
      reader.close();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if (reader != null) {
        try {
          reader.close();
        } catch (IOException e1) {
        }
      }
    }
  }
 
  /**
   * 隨機(jī)讀取文件內(nèi)容
   */
  public static void readFileByRandomAccess(String fileName) {
    RandomAccessFile randomFile = null;
    try {
      System.out.println("隨機(jī)讀取一段文件內(nèi)容:");
      // 打開一個(gè)隨機(jī)訪問文件流,按只讀方式
      randomFile = new RandomAccessFile(fileName, "r");
      // 文件長(zhǎng)度枢泰,字節(jié)數(shù)
      long fileLength = randomFile.length();
      // 讀文件的起始位置
      int beginIndex = (fileLength > 4) ? 4 : 0;
      // 將讀文件的開始位置移到beginIndex位置描融。
      randomFile.seek(beginIndex);
      byte[] bytes = new byte[10];
      int byteread = 0;
      // 一次讀10個(gè)字節(jié),如果文件內(nèi)容不足10個(gè)字節(jié)衡蚂,則讀剩下的字節(jié)窿克。
      // 將一次讀取的字節(jié)數(shù)賦給byteread
      while ((byteread = randomFile.read(bytes)) != -1) {
        System.out.write(bytes, 0, byteread);
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if (randomFile != null) {
        try {
          randomFile.close();
        } catch (IOException e1) {
        }
      }
    }
  }
 
  /**
   * 顯示輸入流中還剩的字節(jié)數(shù)
   */
  private static void showAvailableBytes(InputStream in) {
    try {
      System.out.println("當(dāng)前字節(jié)輸入流中的字節(jié)數(shù)為:" + in.available());
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  public static void main(String[] args) {
    String fileName = "C:/temp/newTemp.txt";
    ReadFromFile.readFileByBytes(fileName);
    ReadFromFile.readFileByChars(fileName);
    ReadFromFile.readFileByLines(fileName);
    ReadFromFile.readFileByRandomAccess(fileName);
  }
}

5、將內(nèi)容追加到文件尾部

public class AppendToFile {
  /**
   * A方法追加文件:使用RandomAccessFile
   */
  public static void appendMethodA(String fileName, String content) {
    try {
      // 打開一個(gè)隨機(jī)訪問文件流讳窟,按讀寫方式
      RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
      // 文件長(zhǎng)度让歼,字節(jié)數(shù)
      long fileLength = randomFile.length();
      //將寫文件指針移到文件尾。
      randomFile.seek(fileLength);
      randomFile.writeBytes(content);
      randomFile.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  /**
   * B方法追加文件:使用FileWriter
   */
  public static void appendMethodB(String fileName, String content) {
    try {
      //打開一個(gè)寫文件器丽啡,構(gòu)造函數(shù)中的第二個(gè)參數(shù)true表示以追加形式寫文件
      FileWriter writer = new FileWriter(fileName, true);
      writer.write(content);
      writer.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 
  public static void main(String[] args) {
    String fileName = "C:/temp/newTemp.txt";
    String content = "new append!";
    //按方法A追加文件
    AppendToFile.appendMethodA(fileName, content);
    AppendToFile.appendMethodA(fileName, "append end. \n");
    //顯示文件內(nèi)容
    ReadFromFile.readFileByLines(fileName);
    //按方法B追加文件
    AppendToFile.appendMethodB(fileName, content);
    AppendToFile.appendMethodB(fileName, "append end. \n");
    //顯示文件內(nèi)容
    ReadFromFile.readFileByLines(fileName);
  }
}

以上就是本文的全部?jī)?nèi)容谋右,希望對(duì)大家的學(xué)習(xí)有所幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末补箍,一起剝皮案震驚了整個(gè)濱河市改执,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坑雅,老刑警劉巖辈挂,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異裹粤,居然都是意外死亡终蒂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門遥诉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拇泣,“玉大人,你說我怎么就攤上這事矮锈∶瓜瑁” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵苞笨,是天一觀的道長(zhǎng)债朵。 經(jīng)常有香客問我,道長(zhǎng)瀑凝,這世上最難降的妖魔是什么序芦? 我笑而不...
    開封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮粤咪,結(jié)果婚禮上芝加,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好藏杖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脉顿,像睡著了一般蝌麸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上艾疟,一...
    開封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天来吩,我揣著相機(jī)與錄音,去河邊找鬼蔽莱。 笑死弟疆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盗冷。 我是一名探鬼主播怠苔,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼圆存,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼胎许!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拷呆,我...
    開封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤锅劝,失蹤者是張志新(化名)和其女友劉穎攒驰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體故爵,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玻粪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诬垂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劲室。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖剥纷,靈堂內(nèi)的尸體忽然破棺而出痹籍,到底是詐尸還是另有隱情,我是刑警寧澤晦鞋,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布蹲缠,位于F島的核電站,受9級(jí)特大地震影響悠垛,放射性物質(zhì)發(fā)生泄漏线定。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一确买、第九天 我趴在偏房一處隱蔽的房頂上張望斤讥。 院中可真熱鬧,春花似錦、人聲如沸芭商。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)铛楣。三九已至近迁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間簸州,已是汗流浹背鉴竭。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岸浑,地道東北人搏存。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像矢洲,于是被迫代替她去往敵國(guó)和親璧眠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容