引言:
文件读写较为容易,直接使用文件输入流,输出流就可以完成以只读或只写的方式打开文件。但是要判断一个文件是否存在,即查找该文件却要注意。
文件写入:
private void writeDataFile() throws IOException {
mUserFile = openFileOutput("user", Context.MODE_PRIVATE);
mWriterUser = new BufferedWriter(new OutputStreamWriter(mUserFile));
mWriterUser.write("Tom");
if (mWriterUser != null) {
mWriterUser.close();
}
mPasswordFile=openFileOutput("password",Context.MODE_PRIVATE);
mWriterPassword=new BufferedWriter(new OutputStreamWriter(mPasswordFile));
mWriterPassword.write("123");
if(mWriterPassword!=null){
mWriterPassword.close();
}
mUserFile=null;
mPasswordFile=null;
mWriterUser=null;
mWriterPassword=null;
}
文件读取:
private void readDataFile() throws IOException{
mUserFileIn=openFileInput("user");
mReaderUser=new BufferedReader(new InputStreamReader(mUserFileIn));
String userstring="";
StringBuilder userbuilder=new StringBuilder();
/**
* 文件的多行读取,判断获取行是否为空以继续
*/
while((userstring=mReaderUser.readLine())!=null){
userbuilder.append(userstring);
}
mId =userbuilder.toString();
if(mReaderUser!=null){
mReaderUser.close();
}
mPasswordFileIn=openFileInput("password");
mReaderPassword=new BufferedReader(new InputStreamReader(mPasswordFileIn));
String passwordstring="";
StringBuilder passwordbuilder=new StringBuilder();
while((passwordstring=mReaderPassword.readLine())!=null){
passwordbuilder.append(passwordstring);
}
mPassword=passwordbuilder.toString();
if(mReaderPassword!=null){
mReaderPassword.close();
}
mUserFileIn=null;
mPasswordFileIn=null;
mReaderUser=null;
mReaderPassword=null;
}
文件查找:
我们的想法是定义一个文件,然后判断他是否存在。
File file=new File("user");
Log.w("TAG:LOGIN_ACTIVITY",""+file.exists());
这样运行程序,你会发现始终打印为false,问题出现在于:查找文件必须使用文件的绝对路径,不能直接使用文件名作为相对路径进行查找。
我们写的文件默认存储在:
点击Andriod Stdio右下角这个地方,打开/data/data/com.example.***/files这个目录,就能找到了。
因此,关键所在:
在代码中获取到此路径,便可以找到文件:
1.你可以一个一个把路径打出来…
2.调用方法:
String string=null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
string=getFilesDir().getAbsolutePath(); //此路径便是文件存储在应用程序中的默认路径
//getFilesDir().getCanonicalPath得到的是规范路径,与我上面描述的默认路径一致
//getFilesDir().getPath()得到的路径就是你写的什么,就得到什么
Log.w("TAG",string+"\n"+getFilesDir().getCanonicalPath()+"\n"+getFilesDir().getPath()+"\n\n"
+getDataDir().getAbsolutePath()+"\n"+getDataDir().getCanonicalPath()+"\n"+getDataDir().getPath());
}
File file=new File(string+"/"+"user");
Log.w("TAG:LOGIN_ACTIVITY",""+file.exists());
3.一张打印图,让你明白这些方法的含义:
此时,files.exists()终于返回了true。