Java读写文件的几种方式
自工作以后好久没有整理Java的基础知识了。趁有时间,整理一下Java文件操作的几种方式。无论哪种编程语言,文件读写操作时避免不了的一件事情,Java也不例外。Java读写文件一般是通过字节、字符和行三种方式来进行文件的操作。
import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; public class FileUtil { /** * 按行读取文件 */ public static void ReadFileByLine(String filename) { File file = new File(filename); InputStream is = null; Reader reader = null; BufferedReader bufferedReader = null; try { is = new FileInputStream(file); reader = new InputStreamReader(is); bufferedReader = new BufferedReader(reader); String line = null; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != bufferedReader) bufferedReader.close(); if (null != reader) reader.close(); if (null != is) is.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 按字节读取文件 * * @param filename */ public static void ReadFileByBytes(String filename) { File file = new File(filename); InputStream is = null; try { is = new FileInputStream(file); int index = 0; while (-1 != (index = is.read())) { System.out.write(index); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (null != is) is.close(); } catch (IOException e) { e.printStackTrace(); } } System.out.println("-----------------------------------"); try { is = new FileInputStream(file); byte[] tempbyte = new byte[1000]; int index = 0; while (-1 != (index = is.read(tempbyte))) { System.out.write(tempbyte, 0, index); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (null != is) is.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 按字符读取文件 * * @param filename */ public static void ReadFileByChar(String filename) { File file = new File(filename); InputStream is = null; Reader isr = null; try { is = new FileInputStream(file); isr = new InputStreamReader(is); int index = 0; while (-1 != (index = isr.read())) { System.out.print((char) index); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (null != is) is.close(); if (null != isr) isr.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 通过OutputStreamWriter写文件 * * @param filename */ public static void Write2FileByOutputStream(String filename) { File file = new File(filename); FileOutputStream fos = null; // BufferedOutputStream bos = null; OutputStreamWriter osw = null; try { if (!file.exists()) { file.createNewFile(); } fos = new FileOutputStream(file); osw = new OutputStreamWriter(fos); osw.write("Write2FileByOutputStream"); // bos = new BufferedOutputStream(fos); // bos.write("Write2FileByOutputStream".getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (null != osw) { try { osw.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != fos) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 通过BufferedWriter写文件 * * @param filename */ public static void Write2FileByBuffered(String filename) { File file = new File(filename); FileOutputStream fos = null; OutputStreamWriter osw = null; BufferedWriter bw = null; try { if (!file.exists()) { file.createNewFile(); } fos = new FileOutputStream(file); osw = new OutputStreamWriter(fos); bw = new BufferedWriter(osw); bw.write("Write2FileByBuffered"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (null != bw) { try { bw.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != osw) { try { osw.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != fos) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 通过FileWriter写文件 * * @param filename */ public static void Write2FileByFileWriter(String filename) { File file = new File(filename); FileWriter fw = null; try { if (!file.exists()) { file.createNewFile(); } fw = new FileWriter(file); fw.write("Write2FileByFileWriter"); } catch (IOException e) { e.printStackTrace(); } finally { if (null != fw) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { String filename = "D:/testfile.txt"; // ReadFileByLine(filename); // ReadFileByBytes(filename); // ReadFileByChar(filename); String writeFile = "javawrite2file.txt"; // Write2FileByOutputStream(writeFile); // Write2FileByBuffered(writeFile); Write2FileByFileWriter(writeFile); } }
Java读写文件的大体情况应该就上面的几种方式,然而从效率的角度来讲。InputStream、OutputStream的效率比BufferedInputStream、BufferedOutputStream的效率要差,至于Reader、Writer没做进一步的比较。网上看到一些资料说Java.nio的效率最高,没有进一步做比较,不得而知了,等有时间再做进一步测试吧。
扫描公众号,关注更多信息
---------------------------------------------------------------------------------我是分割线--------------------------------------------------------------------------to be a better me, talk is cheap show me the code
版权所有,转载请注明原文链接。
文中有不妥或者错误的地方还望指出,以免误人子弟。如果觉得本文对你有所帮助不妨【推荐】一下!如果你有更好的建议,可以给我留言讨论,共同进步!
再次感谢您耐心的读完本篇文章。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?