1.采用File类,在指定目录下读写数据
java后台代码为:
(1)向app的/data/data/com.example.lucky.helloworld目录下写入文本(涉及IO的读写操作)
package com.example.lucky.helloworld; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; public class UserInfoUtils { public static boolean saveInfo(String username,String password){ String result=username+"=="+password; //创建File类,指定数据存储位置 File file=new File("/data/data/com.example.lucky.helloworld/info.txt"); try { //创建一个文件的输出流 FileOutputStream fos=new FileOutputStream(file); fos.write(result.getBytes()); //向文件中写入数据 fos.close(); //关闭文件 return true; } catch (Exception e) { e.printStackTrace(); return false; } } //读取用户信息 public static Map<String,String> readInfo(){ //定义map Map<String,String> map=new HashMap<>(); File file=new File("/data/data/com.example.lucky.helloworld/info.txt"); try { FileInputStream fis=new FileInputStream(file); BufferedReader br=new BufferedReader(new InputStreamReader(fis)); String strTemp=br.readLine(); //读取数据 String[] splitstr=strTemp.split("=="); //对字符串进行切割 String username=splitstr[0]; String password=splitstr[1]; map.put("name",username); //将数据放入map集合中 map.put("pw",password); fis.close(); //关闭数据流 return map; } catch (Exception e) { e.printStackTrace(); return null; } } }
(2)MainActivity.java代码
package com.example.lucky.helloworld; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.util.Map; public class MainActivity extends AppCompatActivity { EditText et_username; EditText et_password; Button bt_login; //当Activityq启动时就会执行onCreate方法 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置activity的内容,内容来自布局文件activity_main.xml setContentView(R.layout.activity_main); Log.v("001","我是verbose级别"); Log.i("001","我是info级别"); Log.d("001","我是debug级别"); Log.w("001","我是warn级别"); Log.e("001","我是error级别"); System.out.println("sout输出"); et_username=findViewById(R.id.et_username); et_password=findViewById(R.id.et_password); bt_login=findViewById(R.id.bt_login); //读取/data/data/com.example.lucky.helloworld/info.txt文件 Map<String,String> map=UserInfoUtils.readInfo(); if(map!=null){ String name=map.get("name"); String password=map.get("pw"); et_username.setText(name); //将读取的数据显示出来 } bt_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String username=et_username.getText().toString(); String password=et_password.getText().toString(); //安卓特有的工具类,用来判断string是否为空 if(TextUtils.isEmpty(username)||TextUtils.isEmpty(password)){ Toast.makeText(MainActivity.this,"用户名不能为空",Toast.LENGTH_SHORT).show(); }else { boolean result=UserInfoUtils.saveInfo(username,password); if(result){ Toast.makeText(MainActivity.this,"数据存储成功",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(MainActivity.this,"数据存储失败",Toast.LENGTH_SHORT).show(); } } } }); } }
2.利用Context类获取常用目录,存储文件(推荐使用)
文件数据保存的模式:
1)MODE_PRIVATE ,这个模式用得最多,其他的模式很少用
2)MODE_APPEND
3)MODE_WORLD_READABLE
4)MODE_WORLD_WRITEABLE
(1)读写工具类
package com.example.lucky.helloworld; import android.content.Context; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; public class UserInfoUtils { public static boolean saveInfo(Context context, String username, String password){ String result=username+"=="+password; try { //创建一个文件的输出流,使用上下文获取常用目录 FileOutputStream fos=context.openFileOutput("info2.txt",Context.MODE_PRIVATE); fos.write(result.getBytes()); //向文件中写入数据 fos.close(); //关闭文件 return true; } catch (Exception e) { e.printStackTrace(); return false; } } //读取用户信息 public static Map<String,String> readInfo(Context context){ //定义map Map<String,String> map=new HashMap<>(); try { FileInputStream fis=context.openFileInput("info2.txt"); BufferedReader br=new BufferedReader(new InputStreamReader(fis)); String strTemp=br.readLine(); //读取数据 String[] splitstr=strTemp.split("=="); //对字符串进行切割 String username=splitstr[0]; String password=splitstr[1]; map.put("name",username); //将数据放入map集合中 map.put("pw",password); fis.close(); //关闭数据流 return map; } catch (Exception e) { e.printStackTrace(); return null; } } }
(2)MainActivity.class
package com.example.lucky.helloworld; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.Map; public class MainActivity extends AppCompatActivity { EditText et_username; EditText et_password; Button bt_login; Button bt_private; Button bt_append; Button bt_readable; Button bt_writeable; //当Activityq启动时就会执行onCreate方法 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置activity的内容,内容来自布局文件activity_main.xml setContentView(R.layout.activity_main); init(); //info2.txt文件 Map<String,String> map=UserInfoUtils.readInfo(MainActivity.this); if(map!=null){ String name=map.get("name"); String password=map.get("pw"); et_username.setText(name); //将读取的数据显示出来 } bt_login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String username=et_username.getText().toString(); String password=et_password.getText().toString(); //安卓特有的工具类,用来判断string是否为空 if(TextUtils.isEmpty(username)||TextUtils.isEmpty(password)){ Toast.makeText(MainActivity.this,"用户名不能为空",Toast.LENGTH_SHORT).show(); }else { boolean result=UserInfoUtils.saveInfo(MainActivity.this,username,password); if(result){ Toast.makeText(MainActivity.this,"数据存储成功",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(MainActivity.this,"数据存储失败",Toast.LENGTH_SHORT).show(); } } } }); //在data/data/com.example.lucky.helloworld下创建files文件夹,生成属性为private的文件 bt_private.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { FileOutputStream fos=openFileOutput("private.txt",MODE_PRIVATE); //创建private.txt fos.write("private".getBytes()); //写入数据 fos.close(); } catch (Exception e) { e.printStackTrace(); } } }); //在data/data/com.example.lucky.helloworld下创建files文件夹,生成属性为append(可追加内容)的文件 bt_append.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { FileOutputStream fos=openFileOutput("append.txt",MODE_APPEND); fos.write("append".getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } }); //在data/data/com.example.lucky.helloworld下创建files文件夹,生成属性为MODE_WORLD_READABLE的文件,只读模式 bt_readable.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { FileOutputStream fos=openFileOutput("readable.txt",MODE_WORLD_READABLE); fos.write("readable".getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } }); bt_writeable.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { try { FileOutputStream fos=openFileOutput("writeable.txt",MODE_WORLD_WRITEABLE); fos.write("writeable".getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } }); } private void init() { et_username=findViewById(R.id.et_username); et_password=findViewById(R.id.et_password); bt_login=findViewById(R.id.bt_login); bt_private=findViewById(R.id.bt_private); bt_append=findViewById(R.id.bt_append); bt_readable=findViewById(R.id.bt_readable); bt_writeable=findViewById(R.id.bt_writeable); } }