逐行读取带有条件的文件

时间:2016-06-17 08:14:30

标签: android

所以我有一个像这样的.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);
    }

3 个答案:

答案 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]);
}