今天新建了一个Android项目,UI如下:
UI代码:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity">
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical">
<ImageView android:layout_width="wrap_content" android:layout_height="250dp"
android:src="@mipmap/background"
android:layout_gravity="center"
/>
<EditText android:layout_width="wrap_content" android:layout_height="wrap_content"
android:hint="请输入qq号"
android:id="@+id/qqnum"
android:layout_gravity="center"
android:inputType="number"
/>
<EditText android:layout_width="wrap_content" android:layout_height="wrap_content"
android:hint="请输入密码"
android:id="@+id/qqpwd"
android:layout_gravity="center"
android:inputType="numberPassword"/>
<CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/checkbox"
android:text="记住密码"/>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/login"
android:text="登陆"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
现在要求在checkbox被勾选的适合记住用户的密码和qq号,那么就要在用户手机里面新建一个文件,将用户的qq号和密码写进去,等到想用的时候再把他们读出来
文件放在应用对应的data文件夹下面
这里有个getFilesDir()方法很好用,这个方法的作用是确定文件所在的目录,是的我们在写文件path的时候不用写那么长的文字,代码如下:
与getFilesDir相类似的还要一个方法getCacheDir(),这个方法是我们用来去各道当前应用的缓存目录,一些重要的信息一班写在files文件夹里面,而部署很重要的东西一班写在缓存里面,用户可以清理缓存,当系统空间不足的时候系统也会自动清理缓存
代码如下:
import java.io.*;
public class MainActivity extends AppCompatActivity {
private Button login;
private EditText qqnum;
private EditText qqpwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
login = findViewById(R.id.login);
qqnum = findViewById(R.id.qqnum);
qqpwd = findViewById(R.id.qqpwd);
login.setOnClickListener(new Button1Click());
qqnum.setText(getQQnum());
}
public String getQQnum(){
StringBuilder num = new StringBuilder("");
try {
File file = new File(getFilesDir(),"qq.txt");
InputStream in = null;
in = new FileInputStream(file);
int tempbyte;
while ((tempbyte = in.read()) != -1) {
num.append((char)(tempbyte));
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
return num.toString();
}
private class Button1Click implements View.OnClickListener{
@Override
public void onClick(View view) {
String qq = qqnum.getText().toString();
Toast.makeText(MainActivity.this, qq,Toast.LENGTH_SHORT).show();
try {
//File file = new File("data/data/com.example.myapplication/qq.txt");
File file = new File(getFilesDir(),"qq.txt");
FileOutputStream stream = null;
stream = new FileOutputStream(file);
stream.write(qq.getBytes());
stream.close();
Toast.makeText(MainActivity.this,"succ",Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(MainActivity.this,"fail",Toast.LENGTH_SHORT).show();
}
}
}
}
这样的话用户只要勾选checkbox我在用户下次登陆的时候就可以把用户之前输入的内容显示到文本框里面了。
2.文件放在外部存储(SD卡里面)
这一步要求加入对外部存储的读写权限,否则会失败:
代码只需要变动一行:
File file = new File(Environment.getExternalStorageDirectory(),"qq.txt");
这就是安卓文件操作