所以我有一个像这样的.txt文件:
Name: James
Phone number: 1111111
age: 50
我希望逐行读取此文件,每次将此行放入地图中。所以最后我想要一张地图,上面有钥匙=姓名,电话号码,年龄和价值=詹姆斯,111111,50。 我有一个代码,它读取文件,但没有这个条件。 请有人帮帮我
这段代码不是我的。
File file;
byte[] buffer = null;
InputStream is;
try {
is = new FileInputStream(file);
int size = is.available();
buffer = new byte[size];
is.read(buffer);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
String str_data = new String(buffer);
}
答案 0 :(得分:0)
如果是JSON文件,您可以轻松完成。但考虑到你的要求,我建议采用这样的方法。
public HashMap<String,String> getMap(String pathToFile){
FileInputStream inStream=new FileInputStream(pathToFile);
BufferedReader reader=new BufferedReader(new InputStreamReader(inStream));
//create a hashmap
HashMap<String,String> map=new HashMap();
//enter empty values (Not exactly necessary)
//you can enter default values if you like
map.put("name",null);
map.put("age",null);
map.put("number",null);
String line;
while((line=reader.readLine())!=null){
//when doing the following its good to check whether lastIndexOf() returns -1
if(line.startsWith("Name:")){
String name=line.substring(line.lastIndexOf(":")+1;
//you can additionally remove starting and ending spaces if you want.
//I do that only here.
map.put("name",name.trim());
}else if(line.startsWith("Phone Number:")){
String number=line.substring(line.lastIndexOf(":")+1;
map.put("number",""+number);
}else if(line.startsWith("age:")){
String age=line.substring(line.lastIndexOf(":")+1;
map.put("age",""+age);
}
}
return map;
}
答案 1 :(得分:0)
您可以使用扫描程序尝试读取所有数据,将此数据作为键值放入HashMap中,然后使用您要查找的键返回HashMap的值:
public String getPreferencesByKey(String key){
Scanner scanner = new Scanner(new File(Environment.getExternalStorageDirectory(),"YOUR TXT FILE"));
HashMap<String,String> preferences = new HashMap<String,String>();
scanner.useDelimiter(":");
//Get all the data from the file
while (scanner.hasNext()&&running) {
String data = scanner.nextLine();
String[] line = data.split(":")
if (line.length > 1) {
variablesToBeParse.put(line[0],line[1].trim);
}
}
return preferences.get(key);
}
或者在代码中以其他方式返回所有HashMap并处理:
public HashMap<String,String>getPreferencesFile(){
Scanner scanner = new Scanner(new File(Environment.getExternalStorageDirectory(),"YOUR TXT FILE"));
HashMap<String,String> preferences = new HashMap<String,String>();
scanner.useDelimiter(":");
//Get all the data from the file
while (scanner.hasNext()&&running) {
String data = scanner.nextLine();
String[] line = data.split(":")
if (line.length > 1) {
variablesToBeParse.put(line[0],line[1].trim);
}
}
return preferences;
}
取决于你真正需要的东西,虽然我建议你使用SharedPreferences而不是你自己的文件:
获取数据
SharedPreferences settingsPreferences = getSharedPreferences(Constants.PREFERENCES_NAME, 0);
settingsPreferences.getString("Name", "");
settingsPreferences.getString("Phone number", "");
settingsPreferences.getInt("age", "");
设置数据:
SharedPreferences settingsPreferences = getSharedPreferences(Constants.PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = settingsPreferences.edit();
editor.putString("Name","Your name");
editor.putString("Phone number","Your phone number");
editor.putInt"age",27);
editor.commit();
您可以在此处找到有关SharedPreferences的更多信息:
https://developer.android.com/reference/android/content/SharedPreferences.html
答案 2 :(得分:0)
您可以使用缓冲读取器读取文件,但是在缓冲读取器readLine()中,每当一个\ n字符将会出现那么多它将在单次读取时读取。否则它将不会返回\ n字符,因此我们需要添加\ n在阅读时
File file1=new File(Environment.getExternalStorageDirectory()+"/abc.txt");
try {
FileReader fileReader=new FileReader(file1);
BufferedReader bufferedReader=new BufferedReader(fileReader);
content=bufferedReader.readLine();
StringBuilder stringBuilder=new StringBuilder(content);
while((content=bufferedReader.readLine())!=null){
stringBuilder.append("\n"+content);
}
content=stringBuilder.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String[] temp=content.split("\n");
HashMap<String,String> valuesMap=new HashMap<String, String>();
String[] keyValue;
for(String value:temp){
keyValue=value.split(":");
valuesMap.put(keyValue[0],keyValue[1]);
}