对同一个文件建立读写流,然后用Propeties类来load该属性文件,尽管文件中有规范的键值对,但是,读取不了文件中的键值对,代码如下:
Properties prop = new Properties();
File f = new File("G:\\workspace\\Bixiangdong\\src\\TestIO\\info.txt");
FileReader fr = new FileReader(f);
FileWriter fw = new FileWriter(f);
prop.load(fr);//失效?那能读取内容吗 同时对一个文件建立读取流和写入流的时候, //加载会失败!
System.out.println("集合中有内容吗?"+prop);//没有内容
prop.list(System.out);//也是空
但是,写成这样,也就是不对文件建立写出流,则可以正常读取键值对:
Properties prop = new Properties();
File f = new File("G:\\workspace\\Bixiangdong\\src\\TestIO\\info.txt");
FileReader fr = new FileReader(f);
prop.load(fr);
System.out.println("集合中有内容吗?"+prop);//有内容
prop.list(System.out);//列出键值对
请大家帮我看一下,这是为什么?
但是同时在对一个文件建立读取流在别的问题中是可以的:
try{
RandomAccessFile raf = new RandomAccessFile(new File("G:\\workspace\\testfilepakage\\4444.txt"),"rw");
int pos = 200;
String content = "\r\n此处是插入的文本内容!\r\n";
raf.seek(200);
File temp = new File("G:\\workspace\\testfilepakage\\temp.txt");
//对一个文件同时建立写入流和读取流是可以的,不会影响正常结果。
FileOutputStream fos = new FileOutputStream(temp);
FileInputStream fis = new FileInputStream(temp);
//temp.deleteOnExit();
int len = 0;
byte[] buf = new byte[256];
while((len = raf.read(buf))!=-1)
{
fos.write(buf, 0, len); //插入点以后的文件内容写入到临时文件中
}
sop("重新定位指针之前指针的位置:"+raf.getFilePointer());
raf.seek(pos);
sop("写入内容之前的指针:"+raf.getFilePointer());
raf.write(content.getBytes());
sop("写入内容之后的指针:"+raf.getFilePointer());
int len1 = 0;
while((len1 = fis.read(buf))!=-1)//将临时文件中内容读出来,重新写到文件中
{
raf.write(buf,0,len1);
}
}catch(IOException e)
{
sop(e.toString());
}这段代码却可以正常运行。而且平时我没注意把读写流分开建立,一般都能行,就是那个Properties读取文件键值对的时候,失效了,搞不懂。
javaIOProperties
Properties prop = new Properties();
File f = new File("G:\\workspace\\Bixiangdong\\src\\TestIO\\info.txt");
FileReader fr = new FileReader(f);
FileWriter fw = new FileWriter(f);
prop.load(fr);//失效?那能读取内容吗 同时对一个文件建立读取流和写入流的时候, //加载会失败!
System.out.println("集合中有内容吗?"+prop);//没有内容
prop.list(System.out);//也是空
但是,写成这样,也就是不对文件建立写出流,则可以正常读取键值对:
Properties prop = new Properties();
File f = new File("G:\\workspace\\Bixiangdong\\src\\TestIO\\info.txt");
FileReader fr = new FileReader(f);
prop.load(fr);
System.out.println("集合中有内容吗?"+prop);//有内容
prop.list(System.out);//列出键值对
请大家帮我看一下,这是为什么?
但是同时在对一个文件建立读取流在别的问题中是可以的:
try{
RandomAccessFile raf = new RandomAccessFile(new File("G:\\workspace\\testfilepakage\\4444.txt"),"rw");
int pos = 200;
String content = "\r\n此处是插入的文本内容!\r\n";
raf.seek(200);
File temp = new File("G:\\workspace\\testfilepakage\\temp.txt");
//对一个文件同时建立写入流和读取流是可以的,不会影响正常结果。
FileOutputStream fos = new FileOutputStream(temp);
FileInputStream fis = new FileInputStream(temp);
//temp.deleteOnExit();
int len = 0;
byte[] buf = new byte[256];
while((len = raf.read(buf))!=-1)
{
fos.write(buf, 0, len); //插入点以后的文件内容写入到临时文件中
}
sop("重新定位指针之前指针的位置:"+raf.getFilePointer());
raf.seek(pos);
sop("写入内容之前的指针:"+raf.getFilePointer());
raf.write(content.getBytes());
sop("写入内容之后的指针:"+raf.getFilePointer());
int len1 = 0;
while((len1 = fis.read(buf))!=-1)//将临时文件中内容读出来,重新写到文件中
{
raf.write(buf,0,len1);
}
}catch(IOException e)
{
sop(e.toString());
}这段代码却可以正常运行。而且平时我没注意把读写流分开建立,一般都能行,就是那个Properties读取文件键值对的时候,失效了,搞不懂。
javaIOProperties
解决方案 »
- 关于命令行参数不能接受 /? 的问题
- 求 C# 代码转换成JAVA代码
- SWT中如何用一个image截取一部分创建新的image
- java类加载后调用其方法出错?
- 怎样用java写个国际象棋棋盘
- 我们技术主任说Java有现成的框架,所以不需要你去设计.什么意思?
- 请教:如何用java语言实现把一段字符串中的字符从little-endian转换成big-endian顺序?
- this.setMediaLocator(new MediaLocator("music/back.mid")); 参数只能是绝对路径不能是相对路径吗?
- applet里如何调用Application??application的基类是JFrame
- 有谁知道,在那儿有IBM AIX的j2sdk1.3版本下载?我急着要,谢了,那儿还有安装文档?
- 如何使新建的ArrayList的元素取值范围为Integer 1到24?
- Applet运行显示不出东西
你下面的代码和上面的代码有很大区别。
FileOutputStream 对象在创建时,如果不选择追加模式,就会清空原文件内容,不管你写没写入。FileWriter实际上也是通过内部的FileOutputStream来操作的,所以是一样的。
但是RandomAccessFile没有这个效果。你上面的代码是对要写入的文件创建FileWriter,所以文件原先的内容被清空了。
下面的代码是对临时文件创建FileOutputStream,临时文件本来就没东西,所以清不清空没影响,更不影响你对真正的目标文件创建RandomAccessFile对象。