java-我在第一次运行中创建的属性文件在第二次运行中被屏蔽
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-我在第一次运行中创建的属性文件在第二次运行中被屏蔽,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3518字,纯文字阅读大概需要6分钟。
内容图文
![java-我在第一次运行中创建的属性文件在第二次运行中被屏蔽](/upload/InfoBanner/zyjiaocheng/674/a7349a992e5a422894754c929db83c93.jpg)
好的,我正在尝试为Minecraft创建一个自定义客户端(不用担心,我的问题与Minecraft无关),并且我添加了一个抽象类来使用Java的内置Properties系统管理配置文件.我有一种方法可以加载属性文件或在不存在的情况下创建它.在我所有其他方法的开头都调用了此方法(尽管它仅在第一次调用时才执行任何操作).
第一次运行Minecraft时,可以很好地创建属性文件,但是第二次运行时,由于某种原因,该文件被清空了.我不确定在哪里,为什么或如何将文件擦干净,有人可以帮我吗?这是我的代码;令人讨厌的方法是loadConfig():
package net.minecraft.src;
import java.util.*;
import java.util.regex.*;
import java.io.*;
/**
* Class for managing my custom client's properties
*
* @author oxguy3
*/
public abstract class OxProps
{
public static boolean configloaded = false;
private static Properties props = new Properties();
private static String[] usernames;
public static void loadConfig() {
System.out.println("loadConfig() called");
if (!configloaded) {
System.out.println("loading config for the first time");
File cfile = new File("oxconfig.properties");
boolean configisnew;
if (!cfile.exists()) {
System.out.println("cfile failed exists(), creating blank file");
try {
configisnew = cfile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
configisnew=true;
}
} else {
System.out.println("cfile passed exists(), proceding");
configisnew=false;
}
FileInputStream cin = null;
FileOutputStream cout = null;
try {
cin = new FileInputStream(cfile);
cout = new FileOutputStream(cfile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (!configisnew) { //if the config already existed
System.out.println("config already existed");
try {
props.load(cin);
} catch (IOException e) {
e.printStackTrace();
}
} else { //if it doesn't exist, and therefore needs to be created
System.out.println("creating new config");
props.setProperty("names", "oxguy3, Player");
props.setProperty("cloak_url", "http://s3.amazonaws.com/MinecraftCloaks/akronman1.png");
try {
props.store(cout, "OXGUY3'S CUSTOM CLIENT\n\ncloak_url is the URL to get custom cloaks from\nnames are the usernames to give cloaks to\n");
cout.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
String names = props.getProperty("names");
System.out.println("names: "+names);
try {
usernames = Pattern.compile(", ").split(names);
} catch (NullPointerException npe) {
npe.printStackTrace();
}
System.out.println("usernames: "+Arrays.toString(usernames));
configloaded=true;
}
}
public static boolean checkUsername(String username) {
loadConfig();
System.out.println("Checking username...");
for (int i=0; i<usernames.length; i++) {
System.out.println("comparing "+username+" with config value "+usernames[i]);
if (username.startsWith(usernames[i])){
System.out.println("we got a match!");
return true;
}
}
System.out.println("no match found");
return false;
}
public static String getCloakUrl() {
loadConfig();
return props.getProperty("cloak_url", "http://s3.amazonaws.com/MinecraftCloaks/akronman1.png");
}
}
如果太难读了,也可以在Pastebin上找到:http://pastebin.com/9UscXWap
谢谢!
解决方法:
您无条件创建新的FileOutputStream(cfile).这将用一个空文件覆盖现有文件.编写新的配置文件时,仅应调用FileOutputStream构造函数.
if (configloaded)
return;
File cfile = new File("oxconfig.properties");
try {
if (cfile.createNewFile()) {
try {
FileOutputStream cout = new FileOutputStream(cfile);
props.setProperty("names", "oxguy3, Player");
props.setProperty("cloak_url", "http://...");
...
cout.flush();
} finally {
cout.close();
}
} else {
FileInputStream cin = new FileInputStream(cfile);
try {
props.load(cin);
} finally {
cin.close();
}
}
configloaded=true;
} catch(IOException ex) {
e.printStackTrace();
}
内容总结
以上是互联网集市为您收集整理的java-我在第一次运行中创建的属性文件在第二次运行中被屏蔽全部内容,希望文章能够帮你解决java-我在第一次运行中创建的属性文件在第二次运行中被屏蔽所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。