android判断文件是否存在跳转不同activity

android studio版本:2021.2.1Patch 2

例程名称:ActivityJump

完成日期:2023.1.17

        一直在完善一个小东西,也是不断的在学习。之前做的那个桌面日历天气(老旧安卓手机发挥余热做桌面时钟摆件使用),有一个问题,就是每次启动app都要重新选择显示模式和城市,虽然不麻烦,但没必要,所以我就想改一下,原理大概是这样:如果已经选择一次模式和城市了(app启动过一次),再次启动的时候就不要选择了,直接用上次的模式和城市显示就可以了。如果需要修改城市可以在显示界面进行修改。先解决第二次启动不用重新选择的问题。

例程实现:

  1. 程序启动的时候启动一个空的activity并判断文件是否存在。

  1. 如果不存在(第一次启动该文件不存在),则正常进入程序,并创建文件file.txt。

  1. 如果文件存在(第二次启动时该文件存在),则直接显示另一页面,并显示文件内容,文件内容每次都是覆盖前一次内容。

知识要点:1、文件存取、判断文件是否存在的操作;2、Activity之间跳转。

问题:我也不知道这是不是最好的方法,反正暂时只会这样。

具体过程:

  1. 建一个项目名称为:activityjump.(主要的activity)

  1. 新建一个关于文件读写的类filehelper.对文件读写操作。(本来可以不用这个,这个是学来的,懒的改)

  1. activity_main.xml里面添加一个文件一个按钮:写入文件;一个textview:文件内容;一个edittext。布局如下图:

 

  1. 在edittext里面输入内容后,点击写入文件按钮,把文件写入file.txt,该文件存在于系统中,系统非root不可访问。

  1. 新建一个空activity:fileexist,用来显示file.txt内容。也是判断文件存在之后跳转的别一个页面。只有两个textview,一个显示文件存在的结果,另一个显示文件内容。如下图:

  1. 新建一个空activity:welcome,启动app时先启动这个activity,没有任何控件,就是判断文件是否存在,并实现activity之间跳转

如果文件存在跳转到FileExist这个activity.

如果文件不存在跳转到MainActivity.

新建这个activity的时候下面这个框一定要选上,因为这个activity是后建的,不选上app启动的时候还是启动MainActivity。新建如下图:

全部代码:

Welcome.java 界面无内容,布局文件xml不用修改。

package com.example.activityjump;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;

import java.io.File;

public class Welcome extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        fileExist();
    }

//对文件是否存在进行判断,然后跳转到不同的activity.
    private void fileExist(){
        File f=new File(getApplicationContext().getFilesDir(),"file.txt");
        Intent intent = new Intent();
        if(f.exists()) {
            intent.setClass(Welcome.this,FileExist.class);//文件存在跳转的页面
            startActivity(intent);//开始跳转
            finish();//销毁本页面
            System.out.println("文件存在。");
        }else{
            intent.setClass(Welcome.this,MainActivity.class);//文件不存在跳转的页面。
            startActivity(intent);//开始跳转
            finish();//销毁本页面
            System.out.println("文件不不不不存在。");

        }
    }

说明:

  1. File f=new File(getApplicationContext().getFilesDir(),"file.txt");不指定文件路径要这么写,不然app总找不到文件,为什么这么写还没研究。

  1. activity之间跳转见:android studio radiobutton单选按钮实现界面跳转备忘(两种方法),其实关键就是下面几行代码:

Intent intent = new Intent();

intent.setClass(Welcome.this,FileExist.class);//文件存在跳转的页面

startActivity(intent);//开始跳转

finish();//销毁本页面

MainActivity.java

package com.example.activityjump;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private Button btnsave;
    private Context mContext;
    private TextView editdetail;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnsave=(Button)findViewById(R.id.btnsave);
        editdetail=(TextView)findViewById(R.id.editdetail);
        btnsave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FileHelper fHelper = new FileHelper(getApplicationContext());
                String filedetail = editdetail.getText().toString();//获取editdetail控件输入内容
                try {
                    fHelper.save("file.txt", filedetail);
                    Toast.makeText(getApplicationContext(), "数据写入成功", Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(), "数据写入失败", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:text="@string/detailtitle"
        android:textSize="20sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editdetail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minLines="2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3"
        android:textSize="25sp"
        tools:ignore="SpeakableTextPresentCheck,SpeakableTextPresentCheck" />

    <Button
        android:id="@+id/btnsave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btnwrite"
        app:layout_constraintStart_toStartOf="parent"
        android:textSize="20sp"
        app:layout_constraintTop_toBottomOf="@+id/editdetail" />


</androidx.constraintlayout.widget.ConstraintLayout>

FileExist.java

package com.example.activityjump;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;

public class FileExist extends AppCompatActivity {
    private Context mContext;
    private TextView showfile;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file_exist);
        showfile=(TextView)findViewById(R.id.textView2);
        showFile();
    }
    //读取file.txt文件内容,textview显示文件内容。
    private void showFile(){
        String detail = "";
        FileHelper fHelper2 = new FileHelper(getApplicationContext());
        try {
            detail = fHelper2.read("file.txt");
            showfile.setText(detail);//textview显示文件内容
            System.out.println("文件读取成功。");
        } catch (IOException e) {
            e.printStackTrace();
        }
        Toast.makeText(getApplicationContext(), detail, Toast.LENGTH_SHORT).show();
    }
}

activity_file_exist.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FileExist">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="150dp"
        android:text="文件存在"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="52dp"
        android:text="TextView"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.501"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>

FileHelper.java

package com.example.activityjump;

import android.content.Context;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileHelper {
    private Context mContext;

    public FileHelper() {
    }

    public FileHelper(Context mContext) {
        super();
        this.mContext = mContext;
    }

    /*
     * 这里定义的是一个文件保存的方法,写入到文件中,所以是输出流
     * */
    public void save(String filename, String filecontent) throws Exception {
        //这里我们使用私有模式,创建出来的文件只能被本应用访问,还会覆盖原文件哦
        FileOutputStream output = mContext.openFileOutput(filename, Context.MODE_PRIVATE);
        output.write(filecontent.getBytes());  //将String字符串以字节流的形式写入到输出流中
        output.close();         //关闭输出流
    }


    /*
     * 这里定义的是文件读取的方法
     * */
    public String read(String filename) throws IOException {
        //打开文件输入流
        FileInputStream input = mContext.openFileInput(filename);
        byte[] temp = new byte[1024];
        StringBuilder sb = new StringBuilder("");
        int len = 0;
        //读取文件内容:
        while ((len = input.read(temp)) > 0) {
            sb.append(new String(temp, 0, len));
        }
        //关闭输入流
        input.close();
        return sb.toString();
    }
}

(FileHelper.java内容完全来自菜鸟教程)

关于文件读写的补充说明:

FileOutputStream output = mContext.openFileOutput(filename, Context.MODE_PRIVATE);

FileOutputStream有四种模式,见下图:

(上图来源于菜鸟教程)

其中:MODE_APPEND模式为不换行追加。

例程动画演示:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kim5659

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

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

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

打赏作者

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

抵扣说明:

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

余额充值