ini 文件内容:
[总菜单]
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
[1001]
1000101 = 菜单1-1
1000102 = 菜单1-2
1000103 = 菜单1-3
1000104 = 菜单1-4
[1000101]
100010101 = 菜单1-1-1
100010102 = 菜单1-1-2
100010103 = 菜单1-1-3
14 个解决方案
#1
这个应该很简单吧,
把每一个
[总菜单]
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
这样的结构中的
[总菜单]为key,剩余数据存到一个list中做value,一个递归+循环就可以了,至于创建树形结构的时候推荐使用DefaultMutableTreeNode,这个创建树比较好用
把每一个
[总菜单]
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
这样的结构中的
[总菜单]为key,剩余数据存到一个list中做value,一个递归+循环就可以了,至于创建树形结构的时候推荐使用DefaultMutableTreeNode,这个创建树比较好用
#2
呃,更正一下上面的话:[总菜单]为key,剩余数据存到一个list中做value,存储到HashTable中
#3
关注
#4
public class ConfigFile {
private String sCon;
private String str = null;
public ConfigFile() {
}
public void readFile(File file) throws IOException {
InputStream input;
LinkedHashMap<String, String> v1 = new LinkedHashMap<String, String>();
HashMap<String, LinkedHashMap<String, String>> v2 = new HashMap<String, LinkedHashMap<String, String>>();
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
String str = null;
String key = null;
while ((str = br.readLine()) != null) {
str = str.trim();
if (str.indexOf("=") == -1
&& (str.indexOf("[") == -1 && str.indexOf("]") == -1)) {
continue;
}
if (str.indexOf("[") != -1 && str.indexOf("]") != -1) {
key = str.replace("[", "").replace("]", "");
}
if (key == null) {
continue;
}
String[] strs = null;
int index = str.indexOf("=");
if (index != -1) {
if (key.equals("总菜单")) {
strs = str.split("=");
if(strs == null || strs.length != 2){
continue;
}
v1.put(strs[0].trim(), strs[1].trim());
} else {
if (v2.containsKey(key)) {
LinkedHashMap<String, String> mp = v2.get(key);
strs = str.split("=");
if(strs == null || strs.length != 2){
continue;
}
mp.put(strs[0].trim(), strs[1].trim());
} else {
LinkedHashMap<String, String> mp = new LinkedHashMap<String, String>();
v2.put(key, mp);
strs = str.split("=");
if(strs == null || strs.length != 2){
continue;
}
mp.put(strs[0].trim(), strs[1].trim());
}
}
}
}
System.out.println();
}
public static void main(String[] args) throws IOException{
ConfigFile config = new ConfigFile();
config.readFile(new File("C:\\Documents and Settings\\gongfl\\桌面\\1.ini"));
}
}
#5
ini 文件内容可以这样:
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
1000101 = 菜单1-1
1000102 = 菜单1-2
1000103 = 菜单1-3
1000104 = 菜单1-4
100010101 = 菜单1-1-1
100010102 = 菜单1-1-2
100010103 = 菜单1-1-3
然后用Properties对象加载进来,
然后再用算出它的子级别,
这样就不用去解析代码,
会方便一点,
因为你的键值都是有规律的,
所以应该可以用这样的方式处理
#6
学习
#7
学习啦
#8
学习!
#9
ini 文件内容可以这样:
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
1000101 = 菜单1-1
1000102 = 菜单1-2
1000103 = 菜单1-3
1000104 = 菜单1-4
100010101 = 菜单1-1-1
100010102 = 菜单1-1-2
100010103 = 菜单1-1-3
然后用Properties对象加载进来,
然后再用算出它的子级别,
这样就不用去解析代码,
会方便一点,
因为你的键值都是有规律的,
所以应该可以用这样的方式处理
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
1000101 = 菜单1-1
1000102 = 菜单1-2
1000103 = 菜单1-3
1000104 = 菜单1-4
100010101 = 菜单1-1-1
100010102 = 菜单1-1-2
100010103 = 菜单1-1-3
然后用Properties对象加载进来,
然后再用算出它的子级别,
这样就不用去解析代码,
会方便一点,
因为你的键值都是有规律的,
所以应该可以用这样的方式处理
#10
完全看不懂啊!!!!!!!!!
#11
自己解析文件而已了,很简单的,给你写个sample
import java.io.*;
import java.util.*;
public class IniConfig {
private File file;
private Map<String, Map<String, String>> map = new LinkedHashMap<String, Map<String, String>>();
public IniConfig(File file) throws Exception {
this.file = file;
load();
}
public IniConfig(String fileName) throws Exception {
this(new File(fileName));
}
private void load() throws Exception {
RandomAccessFile raf = new RandomAccessFile(file, "rw");
String buf, seg=null;
while ((buf = raf.readLine()) != null) {
buf = buf.trim();
if (buf.startsWith(";")) continue; //注释行不要
if (buf.length() == 0) continue; //空行不要
int index = buf.indexOf("=");
if (buf.matches("^\\[(.*?)\\]$")) { //如果是[]行
seg = buf.substring(1, buf.length()-1);
if (! map.containsKey(seg)) {map.put(seg, new LinkedHashMap<String, String>());}
} else if (index > 0) { //如果是xxx=yyy行
String v1 = buf.substring(0, index).replaceAll("^\\s*|\\s*$", ""); //=前半部
String v2 = buf.substring(index+1).replaceAll("^\\s*|\\s*$", ""); //=后半部
if (seg == null) { //如果不存在[]项目,都归于总的一个节点
seg = String.format("ini-%d", file.hashCode());
if (!map.containsKey(seg)) {map.put(seg, new LinkedHashMap<String, String>());}
}
map.get(seg).put(v1, v2);
}
}
raf.close();
}
public String[] getAllSeg() { //获取所有[]
return map.keySet().toArray(new String[0]);
}
public Map<String, String> getItems(String seg) { //获取某个[]下的所有xxx=yyyy
return Collections.unmodifiableMap(map.get(seg));
}
public String getItem(String seg, String key) { //获取某个[]下的xxx的yyy
return map.get(seg).get(key);
}
public boolean containsSeg(String seg) {
return map.containsKey(seg);
}
public boolean containsItemKey(String key) {
for (Map<String, String> m : map.values()) {
if (m.containsKey(key)) {return true;}
}
return false;
}
public boolean containsItemValue(String value) {
for (Map<String, String> m : map.values()) {
if (m.containsValue(value)) {return true;}
}
return false;
}
public static void main(String[] args) throws Exception{
IniConfig ini = new IniConfig("test.ini");
String[] seg = ini.getAllSeg();
for (String s : seg) {
System.out.printf("[%s]\n", s);
for (Map.Entry<String, String> e : ini.getItems(s).entrySet()) {
System.out.printf("%s = %s\n", e.getKey(), e.getValue());
}
}
}
}
#12
package util;
import java.io.*;
import java.util.*;
public class IniConfig {
private File file;
private Map<String, Map<String, String>> map = new LinkedHashMap<String, Map<String, String>>();
public IniConfig(File file) throws Exception {
this.file = file;
load();
}
public IniConfig(String fileName) throws Exception {
this(new File(fileName));
}
private void load() throws Exception {
RandomAccessFile raf = new RandomAccessFile(file, "rw");
String buf, seg = null;
while ((buf = raf.readLine()) != null) {
buf = buf.trim();
if (buf.startsWith(";"))
continue; // 注释行不要
if (buf.length() == 0)
continue; // 空行不要
int splitIndex = buf.indexOf(";"); //去掉注释
if(splitIndex>1){
buf = buf.substring(0, splitIndex-1).trim();
}
int index = buf.indexOf("=");
if (buf.matches("^\\[(.*?)\\]$")) { // 如果是[]行
seg = buf.substring(1, buf.length() - 1);
if (!map.containsKey(seg)) {
map.put(seg, new LinkedHashMap<String, String>());
}
} else if (index > 0) { // 如果是xxx=yyy行
String v1 = buf.substring(0, index).replaceAll("^\\s*|\\s*$", ""); // =前半部
String v2 = buf.substring(index + 1).replaceAll("^\\s*|\\s*$", ""); // =后半部
if (seg == null) { // 如果不存在[]项目,都归于总的一个节点
seg = String.format("ini-%d", file.hashCode());
if (!map.containsKey(seg)) {
map.put(seg, new LinkedHashMap<String, String>());
}
}
map.get(seg).put(v1, v2);
}
}
raf.close();
}
public String[] getAllSeg() { // 获取所有[]
return map.keySet().toArray(new String[0]);
}
public Map<String, String> getItems(String seg) { // 获取某个[]下的所有xxx=yyyy
return Collections.unmodifiableMap(map.get(seg));
}
public String getItem(String seg, String key) { // 获取某个[]下的xxx的yyy
return map.get(seg).get(key);
}
public boolean containsSeg(String seg) {
return map.containsKey(seg);
}
public boolean containsItemKey(String key) {
for (Map<String, String> m : map.values()) {
if (m.containsKey(key)) {
return true;
}
}
return false;
}
public boolean containsItemValue(String value) {
for (Map<String, String> m : map.values()) {
if (m.containsValue(value)) {
return true;
}
}
return false;
}
public static void main(String[] args) throws Exception {
IniConfig ini = new IniConfig("d:/test.ini");
String[] seg = ini.getAllSeg();
for (String s : seg) {
System.out.printf("[%s]\n", s);
for (Map.Entry<String, String> e : ini.getItems(s).entrySet()) {
System.out.printf("%s = %s\n", e.getKey(), e.getValue());
}
}
}
}
#13
在楼上的代码基础上 改了改,希望楼上别介意。
#14
有点难 我不会
#1
这个应该很简单吧,
把每一个
[总菜单]
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
这样的结构中的
[总菜单]为key,剩余数据存到一个list中做value,一个递归+循环就可以了,至于创建树形结构的时候推荐使用DefaultMutableTreeNode,这个创建树比较好用
把每一个
[总菜单]
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
这样的结构中的
[总菜单]为key,剩余数据存到一个list中做value,一个递归+循环就可以了,至于创建树形结构的时候推荐使用DefaultMutableTreeNode,这个创建树比较好用
#2
呃,更正一下上面的话:[总菜单]为key,剩余数据存到一个list中做value,存储到HashTable中
#3
关注
#4
public class ConfigFile {
private String sCon;
private String str = null;
public ConfigFile() {
}
public void readFile(File file) throws IOException {
InputStream input;
LinkedHashMap<String, String> v1 = new LinkedHashMap<String, String>();
HashMap<String, LinkedHashMap<String, String>> v2 = new HashMap<String, LinkedHashMap<String, String>>();
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
String str = null;
String key = null;
while ((str = br.readLine()) != null) {
str = str.trim();
if (str.indexOf("=") == -1
&& (str.indexOf("[") == -1 && str.indexOf("]") == -1)) {
continue;
}
if (str.indexOf("[") != -1 && str.indexOf("]") != -1) {
key = str.replace("[", "").replace("]", "");
}
if (key == null) {
continue;
}
String[] strs = null;
int index = str.indexOf("=");
if (index != -1) {
if (key.equals("总菜单")) {
strs = str.split("=");
if(strs == null || strs.length != 2){
continue;
}
v1.put(strs[0].trim(), strs[1].trim());
} else {
if (v2.containsKey(key)) {
LinkedHashMap<String, String> mp = v2.get(key);
strs = str.split("=");
if(strs == null || strs.length != 2){
continue;
}
mp.put(strs[0].trim(), strs[1].trim());
} else {
LinkedHashMap<String, String> mp = new LinkedHashMap<String, String>();
v2.put(key, mp);
strs = str.split("=");
if(strs == null || strs.length != 2){
continue;
}
mp.put(strs[0].trim(), strs[1].trim());
}
}
}
}
System.out.println();
}
public static void main(String[] args) throws IOException{
ConfigFile config = new ConfigFile();
config.readFile(new File("C:\\Documents and Settings\\gongfl\\桌面\\1.ini"));
}
}
#5
ini 文件内容可以这样:
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
1000101 = 菜单1-1
1000102 = 菜单1-2
1000103 = 菜单1-3
1000104 = 菜单1-4
100010101 = 菜单1-1-1
100010102 = 菜单1-1-2
100010103 = 菜单1-1-3
然后用Properties对象加载进来,
然后再用算出它的子级别,
这样就不用去解析代码,
会方便一点,
因为你的键值都是有规律的,
所以应该可以用这样的方式处理
#6
学习
#7
学习啦
#8
学习!
#9
ini 文件内容可以这样:
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
1000101 = 菜单1-1
1000102 = 菜单1-2
1000103 = 菜单1-3
1000104 = 菜单1-4
100010101 = 菜单1-1-1
100010102 = 菜单1-1-2
100010103 = 菜单1-1-3
然后用Properties对象加载进来,
然后再用算出它的子级别,
这样就不用去解析代码,
会方便一点,
因为你的键值都是有规律的,
所以应该可以用这样的方式处理
1001 = 菜单1
1002 = 菜单2
1003 = 菜单3
1004 = 菜单4
1005 = 菜单5
1006 = 菜单6
1000101 = 菜单1-1
1000102 = 菜单1-2
1000103 = 菜单1-3
1000104 = 菜单1-4
100010101 = 菜单1-1-1
100010102 = 菜单1-1-2
100010103 = 菜单1-1-3
然后用Properties对象加载进来,
然后再用算出它的子级别,
这样就不用去解析代码,
会方便一点,
因为你的键值都是有规律的,
所以应该可以用这样的方式处理
#10
完全看不懂啊!!!!!!!!!
#11
自己解析文件而已了,很简单的,给你写个sample
import java.io.*;
import java.util.*;
public class IniConfig {
private File file;
private Map<String, Map<String, String>> map = new LinkedHashMap<String, Map<String, String>>();
public IniConfig(File file) throws Exception {
this.file = file;
load();
}
public IniConfig(String fileName) throws Exception {
this(new File(fileName));
}
private void load() throws Exception {
RandomAccessFile raf = new RandomAccessFile(file, "rw");
String buf, seg=null;
while ((buf = raf.readLine()) != null) {
buf = buf.trim();
if (buf.startsWith(";")) continue; //注释行不要
if (buf.length() == 0) continue; //空行不要
int index = buf.indexOf("=");
if (buf.matches("^\\[(.*?)\\]$")) { //如果是[]行
seg = buf.substring(1, buf.length()-1);
if (! map.containsKey(seg)) {map.put(seg, new LinkedHashMap<String, String>());}
} else if (index > 0) { //如果是xxx=yyy行
String v1 = buf.substring(0, index).replaceAll("^\\s*|\\s*$", ""); //=前半部
String v2 = buf.substring(index+1).replaceAll("^\\s*|\\s*$", ""); //=后半部
if (seg == null) { //如果不存在[]项目,都归于总的一个节点
seg = String.format("ini-%d", file.hashCode());
if (!map.containsKey(seg)) {map.put(seg, new LinkedHashMap<String, String>());}
}
map.get(seg).put(v1, v2);
}
}
raf.close();
}
public String[] getAllSeg() { //获取所有[]
return map.keySet().toArray(new String[0]);
}
public Map<String, String> getItems(String seg) { //获取某个[]下的所有xxx=yyyy
return Collections.unmodifiableMap(map.get(seg));
}
public String getItem(String seg, String key) { //获取某个[]下的xxx的yyy
return map.get(seg).get(key);
}
public boolean containsSeg(String seg) {
return map.containsKey(seg);
}
public boolean containsItemKey(String key) {
for (Map<String, String> m : map.values()) {
if (m.containsKey(key)) {return true;}
}
return false;
}
public boolean containsItemValue(String value) {
for (Map<String, String> m : map.values()) {
if (m.containsValue(value)) {return true;}
}
return false;
}
public static void main(String[] args) throws Exception{
IniConfig ini = new IniConfig("test.ini");
String[] seg = ini.getAllSeg();
for (String s : seg) {
System.out.printf("[%s]\n", s);
for (Map.Entry<String, String> e : ini.getItems(s).entrySet()) {
System.out.printf("%s = %s\n", e.getKey(), e.getValue());
}
}
}
}
#12
package util;
import java.io.*;
import java.util.*;
public class IniConfig {
private File file;
private Map<String, Map<String, String>> map = new LinkedHashMap<String, Map<String, String>>();
public IniConfig(File file) throws Exception {
this.file = file;
load();
}
public IniConfig(String fileName) throws Exception {
this(new File(fileName));
}
private void load() throws Exception {
RandomAccessFile raf = new RandomAccessFile(file, "rw");
String buf, seg = null;
while ((buf = raf.readLine()) != null) {
buf = buf.trim();
if (buf.startsWith(";"))
continue; // 注释行不要
if (buf.length() == 0)
continue; // 空行不要
int splitIndex = buf.indexOf(";"); //去掉注释
if(splitIndex>1){
buf = buf.substring(0, splitIndex-1).trim();
}
int index = buf.indexOf("=");
if (buf.matches("^\\[(.*?)\\]$")) { // 如果是[]行
seg = buf.substring(1, buf.length() - 1);
if (!map.containsKey(seg)) {
map.put(seg, new LinkedHashMap<String, String>());
}
} else if (index > 0) { // 如果是xxx=yyy行
String v1 = buf.substring(0, index).replaceAll("^\\s*|\\s*$", ""); // =前半部
String v2 = buf.substring(index + 1).replaceAll("^\\s*|\\s*$", ""); // =后半部
if (seg == null) { // 如果不存在[]项目,都归于总的一个节点
seg = String.format("ini-%d", file.hashCode());
if (!map.containsKey(seg)) {
map.put(seg, new LinkedHashMap<String, String>());
}
}
map.get(seg).put(v1, v2);
}
}
raf.close();
}
public String[] getAllSeg() { // 获取所有[]
return map.keySet().toArray(new String[0]);
}
public Map<String, String> getItems(String seg) { // 获取某个[]下的所有xxx=yyyy
return Collections.unmodifiableMap(map.get(seg));
}
public String getItem(String seg, String key) { // 获取某个[]下的xxx的yyy
return map.get(seg).get(key);
}
public boolean containsSeg(String seg) {
return map.containsKey(seg);
}
public boolean containsItemKey(String key) {
for (Map<String, String> m : map.values()) {
if (m.containsKey(key)) {
return true;
}
}
return false;
}
public boolean containsItemValue(String value) {
for (Map<String, String> m : map.values()) {
if (m.containsValue(value)) {
return true;
}
}
return false;
}
public static void main(String[] args) throws Exception {
IniConfig ini = new IniConfig("d:/test.ini");
String[] seg = ini.getAllSeg();
for (String s : seg) {
System.out.printf("[%s]\n", s);
for (Map.Entry<String, String> e : ini.getItems(s).entrySet()) {
System.out.printf("%s = %s\n", e.getKey(), e.getValue());
}
}
}
}
#13
在楼上的代码基础上 改了改,希望楼上别介意。
#14
有点难 我不会