Java讀取文件作為字符串

在平時的開發(fā)中陕靠,為了測試方便蛉艾,經(jīng)常會用到從文件中讀取數(shù)據(jù)作為字符串的操作,這里主要記錄Java讀取文件的幾種方法胧卤。

注意:以下方法主要是為了在debug的時候mock數(shù)據(jù)使用绍昂,如果文件過大啦粹,可能會導(dǎo)致OOM,慎用

1. 通過 BufferedReader 方式讀取

通過BufferedReaderreadLine方法逐行讀取

/**
 * 通過BufferedReader讀取
 * @param path 文件的本地絕對路徑
 * @return
 */
public static String readAsString(String path) {
    try {
        BufferedReader reader = new BufferedReader(new FileReader(path));
        StringBuilder stringBuilder = new StringBuilder();
        String line = null;
        String ls = System.getProperty("line.separator");
        while ((line = reader.readLine()) != null) {
            stringBuilder.append(line);
            stringBuilder.append(ls);
        }
        // 刪除最后一個新行分隔符
        stringBuilder.delete(stringBuilder.length() - ls.length(), stringBuilder.length());
        reader.close();

        String content = stringBuilder.toString();
        return content;
    }catch (Exception exception){
        logger.error("readAsString error,path={},exception={}", path, ExceptionUtils.getStackTrace(exception));
        return null;
    }
}
2. 通過BufferedReader和char數(shù)組的方式
/**
 * 通過BufferedReader和char數(shù)組的方式
 * @param path 文件的本地絕對路徑
 * @return
 */
public static String readAsString2(String path) {
    try {
        BufferedReader reader = new BufferedReader(new FileReader(path));
        StringBuilder stringBuilder = new StringBuilder();
        char[] buffer = new char[1024];
        int len = -1;
        while ((len = reader.read(buffer)) != -1) {
            stringBuilder.append(new String(buffer, 0, len));
            buffer = new char[1024];
        }
        reader.close();

        String content = stringBuilder.toString();
        return content;
    }catch (Exception exception){
        logger.error("readAsString2 error,path={},exception={}", path, ExceptionUtils.getStackTrace(exception));
        return null;
    }
}
3. 通過FileInputStream和byte數(shù)組
/**
 *  通過FileInputStream和byte數(shù)組
 * @param path 文件的本地絕對路徑
 * @return
 */
public static String readAsString3(String path) {
    try {
        FileInputStream fis = new FileInputStream(path);
        byte[] buffer = new byte[1024];
        StringBuilder sb = new StringBuilder();
        int len = -1;
        while ((len = fis.read(buffer)) != -1) {
            sb.append(new String(buffer, 0, len));
            buffer = new byte[1024];
        }
        fis.close();

        String content = sb.toString();
        return content;
    }catch (Exception exception){
        logger.error("readAsString3 error,path={},exception={}", path, ExceptionUtils.getStackTrace(exception));
        return null;
    }
}
4. 通過Files的readAllBytes方法
/**
 *  通過Files的readAllBytes方法
 * @param path 文件的本地絕對路徑
 * @return
 */
public static String readAsString4(String path) {
    try {
        String content = new String(Files.readAllBytes(Paths.get(path)));
        return content;
    }catch (Exception exception){
        logger.error("readAsString4 error,path={},exception={}", path, ExceptionUtils.getStackTrace(exception));
        return null;
    }
}
5. 通過Scanner類讀取
/**
 * 通過Scanner類讀取
 * @param path
 * @return
 */
public static String readAsString5(String path) {
    try {
        Scanner scanner = new Scanner(Paths.get(path), StandardCharsets.UTF_8.name());
        String content = scanner.useDelimiter("\\A").next();
        scanner.close();
        return content;
    } catch (Exception exception) {
        logger.error("readAsString5 error,path={},exception={}", path, ExceptionUtils.getStackTrace(exception));
        return null;
    }
}
6.通過Apache Commons IO FileUtils讀取

需要先添加maven依賴

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>
/**
 * 通過Apache Commons IO FileUtils類讀取
 * 需要依賴commons-io包
 *
 * @param path 文件的本地絕對路徑
 * @return
 */
public static String readAsString6(String path) {
    try {
        String content = FileUtils.readFileToString(new File(path), StandardCharsets.UTF_8);
        return content;
    } catch (Exception exception) {
        logger.error("readAsString6 error,path={},exception={}", path, ExceptionUtils.getStackTrace(exception));
        return null;
    }
}
7. git倉庫

倉庫地址:

https://gitee.com/huangchunhua13/hch-tools/blob/master/src/main/java/org/example/util/FileUtil.java
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窘游,一起剝皮案震驚了整個濱河市唠椭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忍饰,老刑警劉巖贪嫂,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喘批,居然都是意外死亡撩荣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進(jìn)店門饶深,熙熙樓的掌柜王于貴愁眉苦臉地迎上來餐曹,“玉大人,你說我怎么就攤上這事敌厘√ê铮” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饱狂。 經(jīng)常有香客問我曹步,道長,這世上最難降的妖魔是什么休讳? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任讲婚,我火速辦了婚禮,結(jié)果婚禮上俊柔,老公的妹妹穿的比我還像新娘筹麸。我一直安慰自己,他們只是感情好雏婶,可當(dāng)我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布物赶。 她就那樣靜靜地躺著,像睡著了一般留晚。 火紅的嫁衣襯著肌膚如雪酵紫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天错维,我揣著相機(jī)與錄音奖地,去河邊找鬼。 笑死需五,一個胖子當(dāng)著我的面吹牛鹉动,可吹牛的內(nèi)容都是我干的轧坎。 我是一名探鬼主播宏邮,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缸血!你這毒婦竟也來了蜜氨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤捎泻,失蹤者是張志新(化名)和其女友劉穎飒炎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笆豁,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡郎汪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了闯狱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煞赢。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖哄孤,靈堂內(nèi)的尸體忽然破棺而出照筑,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布凝危,位于F島的核電站波俄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛾默。R本人自食惡果不足惜懦铺,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望支鸡。 院中可真熱鬧阀趴,春花似錦、人聲如沸苍匆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浸踩。三九已至叔汁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間检碗,已是汗流浹背据块。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留折剃,地道東北人另假。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像怕犁,于是被迫代替她去往敵國和親边篮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,499評論 2 348

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