java是不是根本修改不了properties文件中键的值啊? 20

我写了一个测试类://省略了包的导入publicfinalclassIDGenerator{//primaryKey.properties文件放在src/config/目... 我写了一个测试类:
//省略了包的导入
public final class IDGenerator {
//primaryKey.properties文件放在src/config/目录下
public static String keyFilePath="config/primaryKey.properties";
public static Properties props = new Properties();
public static File file=null;
static {
try {
file = new File(ClassLoader.getSystemResource(keyFilePath).toURI());
props.load(new FileInputStream(file));
} catch (URISyntaxException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public static int getStaffIDIndex(){

int oldStaffID=0;
try {

InputStream in =new FileInputStream(file);
props.load(in);
oldStaffID = Integer.parseInt(props.getProperty ("staff_id"));
// System.out.println(oldStaffID);
in.close();
return oldStaffID;

} catch (Exception e) {
e.printStackTrace();
return -1;
}
}

public static void updateStaffIDIndex(int staffid){

try {
FileOutputStream fos = new FileOutputStream(file);
props.setProperty("staff_id",String.valueOf(staffid+1));
props.store(fos, "update staffID");
//fos.flush();
fos.close();// 关闭流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// 将Properties集合保存到流中

}

public static void main(String[] args) {
int oriIndex=getStaffIDIndex();
System.out.println("前一个员工号:"+oriIndex);
updateStaffIDIndex(oriIndex);
System.out.println("最新的员工号:"+getStaffIDIndex());
}
每次运行,staffID的值是最新的,但properties文件中的staffID的值总是初始值,根本没有变化

}
展开
 我来答
紫金狼
2011-07-21
知道答主
回答量:7
采纳率:0%
帮助的人:2.4万
展开全部
可以修改,用Properties中的store方法,操作如下,假设工程目录下有个data文件夹,里面有个配置文件cfg.properties,通过该方法可以改变对应的键值:
public static void setProper(String Key, Object value)
{
File file=new File("data/cfg.properties");
Properties pro = new Properties();
FileInputStream fis=null;
BufferedInputStream bis=null;
try
{
fis=new FileInputStream(file);
bis=new BufferedInputStream(fis);
pro.load(bis);
FileOutputStream fos = new FileOutputStream(file);
pro.setProperty(Key, String.valueOf(value));
pro.store(fos, null);
fos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
wuynng
2011-07-11 · TA获得超过315个赞
知道小有建树答主
回答量:147
采纳率:100%
帮助的人:178万
展开全部

可以改的,检查一下你的类文件输出文件夹下的config/primaryKey.properties文件,如图红框所示:

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
072jncgnt
2011-07-12 · TA获得超过2310个赞
知道大有可为答主
回答量:4534
采纳率:0%
帮助的人:869万
展开全部
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;

public class PropertiesTest
{
/*定义静态方法,类名可以直接调用,用于读取properties属性文件中的内容*/
public static void initFile()
{
/*D://a.properties源属性文件的路径和名字*/
File file = new File("D://a.properties");
FileInputStream fis = null;
try
{
/*输入流和属性文件关联*/
fis = new FileInputStream(file);
/*创建属性集对象*/
Properties prop = new Properties();
/*将读取的内容加载到属性集对象中*/
prop.load(fis);
/*返回属性列表中所有键的枚举*/
Enumeration enums = prop.propertyNames();
while (enums.hasMoreElements())
{
/*将每一条属性强制转换为String类型,得到键key*/
String key = (String) enums.nextElement();
/*根据键得到对应的值value(String类型)*/
String value = prop.getProperty(key);
/*输出properties属性文件的内容*/
System.out.println(key+"----"+value);
}
} catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} finally
{
if(fis!=null)
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
/*调用方法读取属性文件中内容*/
PropertiesTest.initFile();
}
}

结果是:
UserPass----
URl----jdbc:microsoft:sqlserver://localhost:1433;databasename=employee
Driver----com.microsoft.jdbc.sqlserver.SQLServerDriver
UserName----sa
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2a06144
2011-07-11 · 超过22用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:65.3万
展开全部
当然不能修改啊,那是写在配置文件里的,是不变的,你修改的只是读到内存里的值!!!无法覆盖文件上的值。
追问
请问一下,有什么办法可以实现如下效果(以添加一本书为例)
在输入图书界面中,图书的编号是从后台读出来的,不需要用户输入,当然也不用数据库中的主键自增的办法。
我原想把图书编号的初始值放在properties文件中,然后进行读写,这个办法行不通,不知有没有其他可以参考的做法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
来自学府园好奇的桔梗
2011-07-11 · TA获得超过1300个赞
知道小有建树答主
回答量:892
采纳率:0%
帮助的人:744万
展开全部
以前我也用过 我记得是能够加载的...你把你上面的加载方法换下
/*建立资源文件 */
private static Properties pro = new Properties();
static
{
/* 加载信息到资源文件 */
InputStream in = 你自己类名.class
.getResourceAsStream("路径");
try
{
pro.load(in);
} catch (IOException e)
{
e.printStackTrace();
}
}
然后下面再来试试 直接用pro 方法.. 把这个配置文件读写 弄成个工具类..
你试试 ...

刚才又试了下,发现只能改变加载到内存中的值,并没有修改到原始文件.....
所以你在用的时候 ,根据你的需要来吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式