本文首发于CSDN,niko7的个人空间。http://blog.csdn.net/niko7
转载和引用必须注明出处!
这个bug是我在调试程序时发现的,还没有查过是否有类似报道,也不确定是否已经修正。
现把测试代码放上来,有兴趣的朋友可以一起来验证,顺便测试一下别的平台,别的版本中是否也存在这个问题?
像这样的问题,一般只存在于特定的平台,特定的版本。
如果恰好你正在用这个平台(或者你的产品将被部署到这个环境),那么注意避开这个bug!
代码:
以下是我测试的环境:
转载和引用必须注明出处!
这个bug是我在调试程序时发现的,还没有查过是否有类似报道,也不确定是否已经修正。
现把测试代码放上来,有兴趣的朋友可以一起来验证,顺便测试一下别的平台,别的版本中是否也存在这个问题?
像这样的问题,一般只存在于特定的平台,特定的版本。
如果恰好你正在用这个平台(或者你的产品将被部署到这个环境),那么注意避开这个bug!
代码:
package
niko7.test.csdn;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
/**
* 测试JDK/JRE中FileWriter的bug。
*
* 详细情况看代码中的注释。
* 这种问题应该是在特定的 jdk/jre 版本中才存在的,望大家协助测试,并将结果反馈到我的blog中: http://blog.csdn.net/niko7
*
* 转载、引用必须保留此段信息。
* @author niko7,(顾法华,杭州)
* @email niko7@163.com
*/
public class TestJDK
{
public static void main(String[] args)
{
Properties p = System.getProperties();
System.out.println("jre信息:");
p.list(System.out);
System.out.println();
String s = "0123456789_0123456789_0123456789_0123456789_0123456789_0123456789_0123456789_0123456789_0123456789_= ";
FileWriter fw = null;
try
{
File f = new File("output.txt");
System.out.println("文件位置:"+f.getAbsoluteFile());
fw = new FileWriter(f);
for (int i = 0; i < 300; i++)
{
fw.write(s);
//如果没有下面一行,那么文件的内容不是你想的那样的!!!!
//第81行,第3个“_”神秘失踪!!
//0123456789_0123456789_01234567890123456789_0123456789_0123456789_0123456789_0123456789_0123456789_=
//比上面的一行和下面的一行短一点!
//第161行,第241行,都有字符丢失!
//fw.flush();//这一行不注释掉就能正常
}
fw.flush();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if(null!=fw)
{
try
{
fw.close();
}
catch (IOException e)
{
e.printStackTrace();
}
fw = null;
}
}
System.out.println("完成!");
}
}
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
/**
* 测试JDK/JRE中FileWriter的bug。
*
* 详细情况看代码中的注释。
* 这种问题应该是在特定的 jdk/jre 版本中才存在的,望大家协助测试,并将结果反馈到我的blog中: http://blog.csdn.net/niko7
*
* 转载、引用必须保留此段信息。
* @author niko7,(顾法华,杭州)
* @email niko7@163.com
*/
public class TestJDK
{
public static void main(String[] args)
{
Properties p = System.getProperties();
System.out.println("jre信息:");
p.list(System.out);
System.out.println();
String s = "0123456789_0123456789_0123456789_0123456789_0123456789_0123456789_0123456789_0123456789_0123456789_= ";
FileWriter fw = null;
try
{
File f = new File("output.txt");
System.out.println("文件位置:"+f.getAbsoluteFile());
fw = new FileWriter(f);
for (int i = 0; i < 300; i++)
{
fw.write(s);
//如果没有下面一行,那么文件的内容不是你想的那样的!!!!
//第81行,第3个“_”神秘失踪!!
//0123456789_0123456789_01234567890123456789_0123456789_0123456789_0123456789_0123456789_0123456789_=
//比上面的一行和下面的一行短一点!
//第161行,第241行,都有字符丢失!
//fw.flush();//这一行不注释掉就能正常
}
fw.flush();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if(null!=fw)
{
try
{
fw.close();
}
catch (IOException e)
{
e.printStackTrace();
}
fw = null;
}
}
System.out.println("完成!");
}
}
以下是我测试的环境:
jre信息:
-- listing properties --
java.runtime.name = Java(TM) 2 Runtime Environment, Stand...
sun.boot.library.path = C:javaj2sdk1. 4 .2_03jrein
java.vm.version = 1.4 .2_03 - b02
java.vm.vendor = Sun Microsystems Inc.
java.vendor.url = http: // java.sun.com/
path.separator = ;
java.vm.name = Java HotSpot(TM) Client VM
file.encoding.pkg = sun.io
user.country = CN
sun.os.patch.level = Service Pack 2
java.vm.specification.name = Java Virtual Machine Specification
user.dir = C: est
java.runtime.version = 1.4 .2_03 - b02
java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs = C:javaj2sdk1. 4 .2_03jrelibendorsed
os.arch = x86
java.io.tmpdir = C:DOCUME ~ 1 gfhLOCALS ~ 1 Temp
line.separator =
java.vm.specification.vendor = Sun Microsystems Inc.
user.variant =
os.name = Windows XP
sun.java2d.fontpath =
java.library.path = C:javaj2sdk1. 4 .2_03in;.;C:WINDOW...
java.specification.name = Java Platform API Specification
java. class .version = 48.0
java.util.prefs.PreferencesFactory = java.util.prefs.WindowsPreferencesFac...
os.version = 5.1
user.home = C:Documents and Settingsgfh
user.timezone =
java.awt.printerjob = sun.awt.windows.WPrinterJob
file.encoding = GB18030
java.specification.version = 1.4
user.name = gfh
java. class .path = C: est est_output...
java.vm.specification.version = 1.0
sun.arch.data.model = 32
java.home = C:javaj2sdk1. 4 .2_03jre
java.specification.vendor = Sun Microsystems Inc.
user.language = zh
awt.toolkit = sun.awt.windows.WToolkit
java.vm.info = mixed mode
java.version = 1.4 .2_03
java.ext.dirs = C:javaj2sdk1. 4 .2_03jrelibext
sun.boot. class .path = C:javaj2sdk1. 4 .2_03jrelib t.jar;...
java.vendor = Sun Microsystems Inc.
file.separator =
java.vendor.url.bug = http: // java.sun.com/cgi-bin/bugreport...
sun.cpu.endian = little
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.isalist = pentium i486 i386
-- listing properties --
java.runtime.name = Java(TM) 2 Runtime Environment, Stand...
sun.boot.library.path = C:javaj2sdk1. 4 .2_03jrein
java.vm.version = 1.4 .2_03 - b02
java.vm.vendor = Sun Microsystems Inc.
java.vendor.url = http: // java.sun.com/
path.separator = ;
java.vm.name = Java HotSpot(TM) Client VM
file.encoding.pkg = sun.io
user.country = CN
sun.os.patch.level = Service Pack 2
java.vm.specification.name = Java Virtual Machine Specification
user.dir = C: est
java.runtime.version = 1.4 .2_03 - b02
java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs = C:javaj2sdk1. 4 .2_03jrelibendorsed
os.arch = x86
java.io.tmpdir = C:DOCUME ~ 1 gfhLOCALS ~ 1 Temp
line.separator =
java.vm.specification.vendor = Sun Microsystems Inc.
user.variant =
os.name = Windows XP
sun.java2d.fontpath =
java.library.path = C:javaj2sdk1. 4 .2_03in;.;C:WINDOW...
java.specification.name = Java Platform API Specification
java. class .version = 48.0
java.util.prefs.PreferencesFactory = java.util.prefs.WindowsPreferencesFac...
os.version = 5.1
user.home = C:Documents and Settingsgfh
user.timezone =
java.awt.printerjob = sun.awt.windows.WPrinterJob
file.encoding = GB18030
java.specification.version = 1.4
user.name = gfh
java. class .path = C: est est_output...
java.vm.specification.version = 1.0
sun.arch.data.model = 32
java.home = C:javaj2sdk1. 4 .2_03jre
java.specification.vendor = Sun Microsystems Inc.
user.language = zh
awt.toolkit = sun.awt.windows.WToolkit
java.vm.info = mixed mode
java.version = 1.4 .2_03
java.ext.dirs = C:javaj2sdk1. 4 .2_03jrelibext
sun.boot. class .path = C:javaj2sdk1. 4 .2_03jrelib t.jar;...
java.vendor = Sun Microsystems Inc.
file.separator =
java.vendor.url.bug = http: // java.sun.com/cgi-bin/bugreport...
sun.cpu.endian = little
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.isalist = pentium i486 i386