使用 Java 程序写文件时,记得要 flush()
使用 Java 程序往磁盘写文件时碰到了这样的问题:文件写不全。
假如内容(StringBuffer/StringBuilder)有 100W 个字符,但是通过 Java 程序写到文件里的却不到 100W ,部分字符不见了。
代码大致是这样的:
     private void writeToDisk() throws Exception {
         File file = new File("FILE_PATH");
         OutputStreamWriter osw = null;
         osw = new OutputStreamWriter(new FileOutputStream(file));
         osw.write("A HUGE...HUGE STRING");
     }
文件是生成了。可内容不对,只写入了部分字符。
我甚至怀疑,是不是 StringBuffer/StringBuilder 也有长度限制?因为每次写入文件的字符都一样多。
现在想想,真是图样图森破啊。
后来,经旁人提醒,你 flush 了吗?
遂恍然大悟。
正确的代码应该是这样的:
   private void writeToDisk2() {
         File file = new File("FILE_PATH");
         OutputStreamWriter osw = null;
         try {
             osw = new OutputStreamWriter(new FileOutputStream(file));
             osw.write("A HUGE...HUGE STRING");
         } catch (FileNotFoundException e) {
             e.printStackTrace();
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
             try {
                 osw.flush();
                 osw.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }
没有 flush , 直接 close 也行。
不过 Java 官方文档提醒:close之前,要 flush 一下。
Closes the stream, flushing it first. Once the stream has been closed, further write() or flush() invocations will cause an IOException to be thrown. Closing a previously closed stream has no effect.
不该犯这样的错误的。
上学的时候老师都教了,打开的流一定要记得关闭。
〇老师,对不起,我错了。
因为只是一个小的测试程序,没有那么规范地写 try/catch ,直接都 throw 掉了。
打住。不要给自己找理由。
再小的程序也有自己的规则/规范,要遵守。
使用 Java 程序写文件时,记得要 flush()的更多相关文章
- java写文件时,输出不完整的原因以及解决方法
		
在java的IO体系中,写文件通常会用到下面语句 BufferedWriter bo=new BufferedWriter(new FileWriter("sql语句.txt")) ...
 - java写文件时,输出不完整的原因以及解决方法close()或flush()
		
在java的IO体系中,写文件通常会用到下面语句 BufferedWriter bw=new BufferedWriter(new FileWriter("sql语句.txt")) ...
 - java写文件时往末尾追加文件(而不是覆盖原文件),的两种方法总结
		
代码如下: import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; public ...
 - cmd命令对java程序进行编译时出现:编码GBK的不可映射字符
		
原因:由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定JAVA源程序的编码格式,则java.exe首先获得我们才做系统默认采用的编码格式,也即在编译JAVA程序时,若我们不 ...
 - java语言写文件内容
		
import java.io.File;import java.io.FileWriter;import java.io.IOException; public static void main(St ...
 - Python 写文件时的Unicode设置
		
今天在把Evenote的笔记内容写为文件时出错: f.write(content) UnicodeEncodeError: 'gbk' codec can& ...
 - Java不写文件,LOAD DATA LOCAL INFILE大批量导入数据到MySQL的实现(转)
		
MySQL使用load data local infile 从文件中导入数据比insert语句要快,MySQL文档上说要快20倍左右.但是这个方法有个缺点,就是导入数据之前,必须要有文件,也就是说从文 ...
 - java读/写文件
		
读取文件参考:https://blog.csdn.net/weixin_42129373/article/details/82154471 写入文件参考:https://blog.csdn.net/B ...
 - java 获取音频文件时长
		
需要导入jar包:jave 1.0.2 jar 如果是maven项目,在pom.xml文件中添加: <dependency> <groupId>it.sauronsoftwar ...
 
随机推荐
- consul 文档
			
consul 服务发现 服务发现,用docker的时候可以使用,并且可以实现负载均衡. 因业务需要,所以留一下自己搜到比较好的资料吧 英文:https://www.consul.io/intro/ge ...
 - Linux之源码安装nginx,并按照作业一描述的那样去测试使用
			
作业五:源码安装nginx,并按照作业一描述的那样去测试使用 [root@localhost nginx]# yum install gcc-* glibc-* openssl openssl-dev ...
 - JAVA自学笔记05
			
JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...
 - Servlet(6)—HttpServletRequest接口和HttpServletResponse接口
			
HttpServletRequest接口和HttpServletResponse接口是继承ServletRequest和ServletResponse接口,是他们的子接口,但是我们在程序中进程看到Se ...
 - 编写CentOS的System V init启动脚本
			
系统本身自带了说明,在/usr/share/doc/initscripts-(*)/sysvinitfiles,内容如下: 所有System V init脚本都命名为/etc/rc.d/init.d/ ...
 - git stash命令详解
			
git stash命令用于将更改储藏在脏工作目录中. 使用语法 git stash list [<options>] git stash show [<stash>] git ...
 - Hadoop+HBase 集群搭建
			
Hadoop+HBase 集群搭建 1. 环境准备 说明:本次集群搭建使用系统版本Centos 7.5 ,软件版本 V3.1.1. 1.1 配置说明 本次集群搭建共三台机器,具体说明下: 主机名 IP ...
 - grid - 使用相同的名称命名网格线和设置网格项目位置
			
1.使用repeat()函数可以给网格线分配相同的名称.这可以节省一定的时间 使用repeat()函数可以给网格线命名,这也导致多个网格线具有相同的网格线名称. 相同网格线名称指定网格线的位置和名称, ...
 - 使用插件扩展Docker
			
http://wwwbuild.net/dockerone/241249.html Docker吸引我的,同时也是促使其成功的一个重要方面,是其开箱即用的特性. “开箱即用”是指什么呢?简单来说, ...
 - jquery中选择器input:hidden和input[type=hidden]的区别
			
关于选择器:hidden的说明,在jquery说明文档中是这样说的:匹配所有不可见元素,或者type为hidden的元素.而[type=hidden]是查找所有type属性等于hidden的元素.两者 ...