Java一分钟之-Java IO流:文件读写基础

Java的IO流是处理输入输出操作的核心工具,包括读取文件、写入文件、网络通信等。本文将介绍文件读写的常见操作,分析易错点,并提供代码示例,帮助你快速掌握Java IO流的基础知识。
在这里插入图片描述

一、文件读写概述

Java中的FileInputStreamFileOutputStream用于处理文件的读写。读取文件时,数据从文件流向内存;写入文件时,数据从内存流向文件。

文件读取

  • FileInputStream:从文件中读取字节流。
  • BufferedReader:从字符流(如文件)中读取文本,提高了读取效率。

文件写入

  • FileOutputStream:向文件中写入字节流。
  • PrintWriter:向字符流(如文件)中写入文本,方便格式化输出。

二、常见操作

1. 文件读取

try (FileInputStream fis = new FileInputStream("example.txt");
     BufferedReader br = new BufferedReader(new InputStreamReader(fis))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

2. 文件写入

try (FileOutputStream fos = new FileOutputStream("example.txt");
     PrintWriter writer = new PrintWriter(fos)) {
    writer.println("Hello, World!");
    writer.println("This is a test.");
} catch (IOException e) {
    e.printStackTrace();
}

三、常见问题与易错点

1. 未关闭流

问题:忘记关闭流可能导致资源泄漏,影响程序性能。 避免:使用try-with-resources语句自动关闭流。

2. 文件路径问题

问题:相对路径可能导致找不到文件,绝对路径更稳定。 避免:使用绝对路径,或确保程序运行目录正确。

3. 编码与解码

问题:默认编码可能与文件实际编码不匹配,导致乱码。 避免:明确指定编码,如new InputStreamReader(fis, "UTF-8")

4. 文件权限

问题:没有写入权限时,写入操作会失败。 避免:确保程序有写入文件的权限,或使用Files类的静态方法处理权限。

5. 文件操作异常处理

问题:忽视异常处理可能导致程序崩溃。 避免:捕获并处理IOException,确保程序健壮性。

四、代码示例:追加写入与读取

// 追加写入
try (FileOutputStream fos = new FileOutputStream("example.txt", true);
     PrintWriter writer = new PrintWriter(fos)) {
    writer.println("Additional content.");
} catch (IOException e) {
    e.printStackTrace();
}

// 读取追加内容
try (FileInputStream fis = new FileInputStream("example.txt");
     BufferedReader br = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

五、总结

理解Java IO流的基本概念,熟练掌握文件读写操作,是进行文件处理的基础。注意流的关闭、文件路径、编码问题,以及异常处理,能够帮助你编写更可靠的程序。在实际开发中,还可以考虑使用BufferedInputStreamBufferedOutputStream提高性能,或使用Files类提供的便捷方法。

kkFileView-4.4.0-SNAPSHOT把doc转pdf 报错 2025-12-01 09:35:00.167 INFO 43091 --- [tp251210093-627] c.k.w.c.OnlinePreviewController : 预览文件url:http://61.155.96.134:33808/web/userfiles/fileupload/202511/1993219102440484866.doc,previewType:OFFICE 2025-12-01 09:35:00.360 INFO 43091 --- [ter-poolentry-4] o.j.local.task.LocalConversionTask : Executing local conversion task [doc -> pdf]... 2025-12-01 09:37:00.360 INFO 43091 --- [tp251210093-627] o.j.l.office.LocalOfficeProcessManager : Restarting due to task timeout... 2025-12-01 09:37:00.360 INFO 43091 --- [tp251210093-627] o.j.l.office.LocalOfficeProcessManager : Trying to forcibly terminate process: 'socket,host=127.0.0.1,port=2001,tcpNoDelay=1;urp;StarOffice.ServiceManager'; pid: 62483 2025-12-01 09:37:00.372 INFO 43091 --- [ssageDispatcher] o.j.local.office.OfficeConnection : Disconnected from 'socket,host=127.0.0.1,port=2001,tcpNoDelay=1' 2025-12-01 09:37:00.372 WARN 43091 --- [ssageDispatcher] o.j.l.o.LocalOfficeManagerPoolEntry : Connection lost unexpectedly; attempting restart 2025-12-01 09:37:00.372 INFO 43091 --- [ssageDispatcher] o.j.l.office.LocalOfficeProcessManager : Restarting due to lost connection... 2025-12-01 09:37:00.372 INFO 43091 --- [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : Process exited with code 137 2025-12-01 09:37:00.375 ERROR 43091 --- [ter-poolentry-4] o.j.local.task.LocalConversionTask : Local conversion failed. com.sun.star.lang.DisposedException: null at com.sun.star.lib.uno.environments.remote.JobQueue.removeJob(JobQueue.java:210) ~[jurt-4.1.2.jar!/:na] at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:330) ~[jurt-4.1.2.jar!/:na] at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:303) ~[jurt-4.1.2.jar!/:na] at com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:87) ~[jurt-4.1.2.jar!/:na] at com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:636) ~[jurt-4.1.2.jar!/:na] at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:146) ~[jurt-4.1.2.jar!/:na] at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:128) ~[jurt-4.1.2.jar!/:na] at com.sun.proxy.$Proxy75.loadComponentFromURL(Unknown Source) ~[na:na] at org.jodconverter.local.task.AbstractLocalOfficeTask.loadDocumentFromURL(AbstractLocalOfficeTask.java:240) ~[jodconverter-local-4.4.6.jar!/:4.4.6] at org.jodconverter.local.task.AbstractLocalOfficeTask.loadDocument(AbstractLocalOfficeTask.java:204) ~[jodconverter-local-4.4.6.jar!/:4.4.6] at org.jodconverter.local.task.LocalConversionTask.execute(LocalConversionTask.java:129) ~[jodconverter-local-4.4.6.jar!/:4.4.6] at org.jodconverter.local.office.LocalOfficeManagerPoolEntry.doExecute(LocalOfficeManagerPoolEntry.java:121) [jodconverter-local-4.4.6.jar!/:4.4.6] at org.jodconverter.core.office.AbstractOfficeManagerPoolEntry.lambda$execute$0(AbstractOfficeManagerPoolEntry.java:81) [jodconverter-core-4.4.6.jar!/:4.4.6] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_251] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_251] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_251] at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_251] Caused by: java.io.IOException: com.sun.star.io.IOException: EOF reached - socket,host=127.0.0.1,port=2001,tcpNoDelay=1,localHost=localhost,localPort=40674,peerHost=localhost,peerPort=2001 at com.sun.star.lib.uno.bridges.java_remote.XConnectionInputStream_Adapter.read(XConnectionInputStream_Adapter.java:55) ~[jurt-4.1.2.jar!/:na] at java.io.DataInputStream.readInt(DataInputStream.java:387) ~[na:1.8.0_251] at com.sun.star.lib.uno.protocols.urp.urp.readBlock(urp.java:355) ~[jurt-4.1.2.jar!/:na] at com.sun.star.lib.uno.protocols.urp.urp.readMessage(urp.java:92) ~[jurt-4.1.2.jar!/:na] at com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge$MessageDispatcher.run(java_remote_bridge.java:105) ~[jurt-4.1.2.jar!/:na] 2025-12-01 09:37:00.384 INFO 43091 --- [er-offprocmng-0] o.j.local.office.OfficeDescriptor : soffice info (from exec path): Product: LibreOffice - Version: ??? - useLongOptionNameGnuStyle: true 2025-12-01 09:37:00.553 INFO 43091 --- [er-offprocmng-0] o.j.local.office.OfficeDescriptor : soffice info (from help output): Product: LibreOffice - Version: 7.5.3.2 - useLongOptionNameGnuStyle: true 2025-12-01 09:37:00.581 INFO 43091 --- [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : Starting process with --accept 'socket,host=127.0.0.1,port=2001,tcpNoDelay=1;urp;StarOffice.ServiceManager' and profileDir '/tmp/.jodconverter_socket_host-127.0.0.1_port-2001_tcpNoDelay-1' 2025-12-01 09:37:01.362 WARN 43091 --- [er-offprocmng-0] o.j.l.o.StartProcessAndConnectRetryable : Office process died with exit code 81; restarting it 2025-12-01 09:37:02.905 INFO 43091 --- [er-offprocmng-0] o.j.local.office.OfficeConnection : Connected: 'socket,host=127.0.0.1,port=2001,tcpNoDelay=1' 2025-12-01 09:37:02.905 INFO 43091 --- [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : Started process; pid: 49641 curl: (7) Failed connect to 119.45.16.244:8888; Connection timed out
最新发布
12-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jimaks

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值