安卓文件操作,读写与查找,解决exists方法始终返回为false

引言:
文件读写较为容易,直接使用文件输入流,输出流就可以完成以只读或只写的方式打开文件。但是要判断一个文件是否存在,即查找该文件却要注意。
文件写入:

    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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tran_sient

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值