当前位置:编程学习 > JAVA >>

在文件特定位置写入内容,怎么处理~?

比如我从一个文件中读取出来了一个字符串“1234”,想把这个字符串写入到a.properties文件中某一行“system.version=”的后面,a.properties中的其他内容都不变·! 这个应该怎么实现~?

可以这样分部:
1  system.version的位置确定(比如是第5行,或者其他),直接把字符串加在后面
2  system.version的位置不确定,但是也要添加在它后面~!

这个怎么办~ 有什么IO能处理  还是要先确定 system.version的位置~? --------------------编程问答-------------------- a.properties 文件在解析时,按照map键值对的形式处理的,要给system.version赋值,直接put就是了 --------------------编程问答-------------------- 要找到这个system.version的位置。你可以用缓冲字符流读properties文件,然后readLine,如果字符串equals("system.version"), replace一下("system.version", "system.version=xxxx"); --------------------编程问答-------------------- 不就是properties文件的操作吗,直接用java.util.Properties。

//把你的a.properties文件load进来
Properties properties=new Properties();
InputStream is=new FileInputStream("a.properties");
properties.load(is);
//把你system.version改成你要的
properties.setProperty("system.version","xxxxx");
//修改后再保存到a.properties文件中
OutputStream os=new FileOutputStream("a.properties");
properties.store(os,null);
is.close();
os.close();
--------------------编程问答--------------------
引用 3 楼 suciver 的回复:
不就是properties文件的操作吗,直接用java.util.Properties。

//把你的a.properties文件load进来
Properties properties=new Properties();
InputStream is=new FileInputStream("a.properties");
properties.load(is);
//把你system.version改成你要的
properties.setProperty("system.version","xxxxx");
//修改后再保存到a.properties文件中
OutputStream os=new FileOutputStream("a.properties");
properties.store(os,null);
is.close();
os.close();
我现在使用的就是这个方法,但是有几个疑问
1.它更新之后会自动在第一行增加更新时间:#Mon Dec 02 15:08:35 CST 2013
请问是否可以去掉?而且如果我原来第一行是注释,它会把原注释覆盖,如果原来不是注释,那么它会挤掉原来的第一行,把更新时间放在第一行~! 这样不行啊~!
2.它会消除掉原来文件的空行,可以不消除吗?
3.它会重新排列我原来文件的顺序,我不希望它改变~!
总之就是  只是希望它仅仅更新 system.version= 后面的内容  其余的都不要变~! --------------------编程问答--------------------
引用 4 楼 seguzhizi 的回复:
Quote: 引用 3 楼 suciver 的回复:

不就是properties文件的操作吗,直接用java.util.Properties。

//把你的a.properties文件load进来
Properties properties=new Properties();
InputStream is=new FileInputStream("a.properties");
properties.load(is);
//把你system.version改成你要的
properties.setProperty("system.version","xxxxx");
//修改后再保存到a.properties文件中
OutputStream os=new FileOutputStream("a.properties");
properties.store(os,null);
is.close();
os.close();
我现在使用的就是这个方法,但是有几个疑问
1.它更新之后会自动在第一行增加更新时间:#Mon Dec 02 15:08:35 CST 2013
请问是否可以去掉?而且如果我原来第一行是注释,它会把原注释覆盖,如果原来不是注释,那么它会挤掉原来的第一行,把更新时间放在第一行~! 这样不行啊~!
2.它会消除掉原来文件的空行,可以不消除吗?
3.它会重新排列我原来文件的顺序,我不希望它改变~!
总之就是  只是希望它仅仅更新 system.version= 后面的内容  其余的都不要变~!

因为properties的操作是由hashtable的值进行输出的。注释是可以的去掉的,但是文件的顺序会被改变因为hashtable的是用hash算法排序的并非文件的原内容顺序。它底层就是用io的BufferedWriter将hashtable的值一行一行输出所以原来文件里的空行自然就没了。
这个没法改变,如果你要全部的原样输出那只能用RandomAccessFile --------------------编程问答--------------------
引用 5 楼 suciver 的回复:
Quote: 引用 4 楼 seguzhizi 的回复:

Quote: 引用 3 楼 suciver 的回复:

不就是properties文件的操作吗,直接用java.util.Properties。

//把你的a.properties文件load进来
Properties properties=new Properties();
InputStream is=new FileInputStream("a.properties");
properties.load(is);
//把你system.version改成你要的
properties.setProperty("system.version","xxxxx");
//修改后再保存到a.properties文件中
OutputStream os=new FileOutputStream("a.properties");
properties.store(os,null);
is.close();
os.close();
我现在使用的就是这个方法,但是有几个疑问
1.它更新之后会自动在第一行增加更新时间:#Mon Dec 02 15:08:35 CST 2013
请问是否可以去掉?而且如果我原来第一行是注释,它会把原注释覆盖,如果原来不是注释,那么它会挤掉原来的第一行,把更新时间放在第一行~! 这样不行啊~!
2.它会消除掉原来文件的空行,可以不消除吗?
3.它会重新排列我原来文件的顺序,我不希望它改变~!
总之就是  只是希望它仅仅更新 system.version= 后面的内容  其余的都不要变~!

因为properties的操作是由hashtable的值进行输出的。注释是可以的去掉的,但是文件的顺序会被改变因为hashtable的是用hash算法排序的并非文件的原内容顺序。它底层就是用io的BufferedWriter将hashtable的值一行一行输出所以原来文件里的空行自然就没了。
这个没法改变,如果你要全部的原样输出那只能用RandomAccessFile


比如~? --------------------编程问答--------------------
引用 6 楼 seguzhizi 的回复:
Quote: 引用 5 楼 suciver 的回复:

Quote: 引用 4 楼 seguzhizi 的回复:

Quote: 引用 3 楼 suciver 的回复:

不就是properties文件的操作吗,直接用java.util.Properties。

//把你的a.properties文件load进来
Properties properties=new Properties();
InputStream is=new FileInputStream("a.properties");
properties.load(is);
//把你system.version改成你要的
properties.setProperty("system.version","xxxxx");
//修改后再保存到a.properties文件中
OutputStream os=new FileOutputStream("a.properties");
properties.store(os,null);
is.close();
os.close();
我现在使用的就是这个方法,但是有几个疑问
1.它更新之后会自动在第一行增加更新时间:#Mon Dec 02 15:08:35 CST 2013
请问是否可以去掉?而且如果我原来第一行是注释,它会把原注释覆盖,如果原来不是注释,那么它会挤掉原来的第一行,把更新时间放在第一行~! 这样不行啊~!
2.它会消除掉原来文件的空行,可以不消除吗?
3.它会重新排列我原来文件的顺序,我不希望它改变~!
总之就是  只是希望它仅仅更新 system.version= 后面的内容  其余的都不要变~!

因为properties的操作是由hashtable的值进行输出的。注释是可以的去掉的,但是文件的顺序会被改变因为hashtable的是用hash算法排序的并非文件的原内容顺序。它底层就是用io的BufferedWriter将hashtable的值一行一行输出所以原来文件里的空行自然就没了。
这个没法改变,如果你要全部的原样输出那只能用RandomAccessFile


比如~?

例如测试的a.properties文件内容如下
b=ag

system.version=1.0

sba=gadf

RandomAccessFile raf=new RandomAccessFile("a.properties","rw");//读写模式
String str=null;
while((str=raf.readLine())!=null){//逐行读取
  if(str.startsWith("system.version=")){//发现system.version开头的
long pos=raf.getFilePointer();//获取当前的文件指针
//当读取到system.version的时候指针其实已经是末尾并且有换行符了,所以将指针定位到system.version开头
pos=pos-str.length()-"\r\n".length();
raf.seek(pos);
raf.writeBytes("system.version=10.0");//修改当前行
        raf.close();//关闭
        break;//退出其它行不管了
  }
}


补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,