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

news2024/11/25 14:41:37

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模式为不换行追加。

例程动画演示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/169246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java 数列排序

试题 基础练习 数列排序提交此题 评测记录 资源限制内存限制&#xff1a;512.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s问题描述给定一个长度为n的数列&#xff0c;将这个数列按从小到大的顺序排列。1<n<200输入格式…

【渗透测试】信息搜集总结

前言零零散散的发布过很多文章了&#xff0c;但是也没有完整的总结一下&#xff0c;今天就从信息搜集入手&#xff0c;系统的总结一下。一方面可以巩固自己的基础&#xff0c;作为自己的字典随用随查&#xff0c;另一方面希望对大家的学习和工作起到帮助作用。按照这个过程基本…

求两点间的距离-C语言实现

任务描述 已知两点A(x1,y1),B(x2,y2),求其间的距离。 输入 一行四个浮点数,x1,y1,x2,y2 输出 两点间的距离,要求不要输出多余的零。 本关知识 两点间的距离公式 pow函数 在C语言中,提供了用于求x的y次幂的函数,函数原型为: double pow(double x, double y…

啊啊啊小红书爆款标题技巧被我找到了!

我通过平日里对小红书的了解和积累&#xff0c;再加上这一阵子对小红书爆款笔记的研究&#xff0c;终于在这么多笔记当中发现了小红书爆款笔记标题的撰写规律&#xff01; 我们在撰写小红书的时候恨不得篇篇都是爆文&#xff0c;那么今天就来讲一下小红书那些爆款笔记标题的撰写…

75、DiffRF: Rendering-Guided 3D Radiance Field Diffusion

简介 主页&#xff1a;https://sirwyver.github.io/DiffRF/ 对应用于三维亮度场的概率扩散过程进行去噪。在3D监控和体积渲染的指导下&#xff0c;模型能够无条件地合成高保真3D资产(左)。 蒙面补全的新应用(右)&#xff0c;即从不完整的对象中恢复形状和外观的任务(在右上方…

超实用的百度百科人物词条创建攻略分享,纯干货

自媒体时代&#xff0c;人们越来越有IP意识&#xff0c;打造个人IP就是在为自己创造更多价值。 个人IP的打造是一个提升知名度的过程&#xff0c;怎么才能快速提升&#xff1f;创建一个百度百科词条不失为一个好的选择。 现在用户有问题就会在百度上搜索一下&#xff0c;当用户…

java实现模拟调用接口

本文总结如何用fiddler和postman调试接口&#xff0c;并用java模拟调用接口。fiddler用法当页面点击事件后&#xff0c;在fiddler出现一个请求&#xff0c;单击左侧请求&#xff0c;在右侧的raw的tab标签&#xff0c;出现该请求的详细内容。其实一个请求需要两类参数&#xff0…

Linux常用命令——umask命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) umask 用来设置限制新建文件权限的掩码 补充说明 umask命令用来设置限制新建文件权限的掩码。当新文件被创建时&#xff0c;其最初的权限由文件创建掩码决定。用户每次注册进入系统时&#xff0c;umask命令都被…

大数据技术架构(组件)——Hive:流程剖析1

1.1、流程剖析大致流程&#xff1a;1、客户端连接到HS2(HiveServer2&#xff0c;目前大多数通过beeline形式连接&#xff0c;Hive Cli模式相对较重&#xff0c;且直接略过授权访问元数据),建立会话2、提交sql&#xff0c;通过Driver进行编译、解析、优化逻辑计划&#xff0c;生…

OCR识别

阿里云和百度云识别&#xff0c;京东智能识别。 图片识别需求 1&#xff0c;拿到一个文件&#xff0c;2&#xff0c;变成InputStream 3&#xff0c;base64编码将流解析下载&#xff0c; 4 调用方法识别 1.身份证 2&#xff0c;行驶证 3&#xff0c;驾驶证 FileUtils file…

Elasticsearch:通过例子快速入门

Elasticsearch 是业界最流行的开源企业搜索引擎&#xff0c;应用广泛。 在我们的手机里的 App 背后的搜索引擎好多都是 Elasticsearch&#xff0c;比如我们熟知的抖音&#xff0c;滴滴&#xff0c;美团&#xff0c;携程&#xff0c;点评&#xff0c;银行 app&#xff0c;保险&a…

ssh反向代理实现内网穿透【亲测可用】

常用内网穿透方式 1、网卡层映射&#xff0c;包括购买公网ip 推荐指数&#xff1a;&#x1f44d;&#x1f3fb;&#x1f44d;&#x1f3fb;&#x1f44d;&#x1f3fb;&#x1f44d;&#x1f3fb;&#x1f44d;&#x1f3fb;。 缺点&#xff1a;主要申请困难。 2、自己搭建内网…

JavaWeb-HTTPTomcatServlet

JavaWeb-HTTP&Tomcat&Servlet 1&#xff0c;Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 在我们日常的生活中&#xff0c;经常会使用浏览器去访问百度、京东、传智官网等这些网站&#xf…

韩顺平老师的linux基础课(复习笔记)

今天听了韩老师的课程&#xff0c;深受启发啊&#xff01;&#xff01;&#xff01; 卖油翁的“我亦无他&#xff0c;唯手熟尔”&#xff0c;只是手法熟练罢了&#xff01;&#xff01; 还有老黄牛的坚持&#xff0c;别人把时间都放在努力上&#xff0c;而我把时间放在选择上&a…

微信小程序分类菜单激活状态跟随列表滚动自动切换

这里主要用到微信小程序提供的SelectorQuery获取页面节点信息实现&#xff0c;组件用的是微信小程序的scroll-view 逻辑就是获取右侧盒子的节点信息&#xff0c;获取右侧子分类的节点信息&#xff0c;当子分类滑动到顶部的之后&#xff0c;则切换左侧分类状态&#xff0c;而且当…

【java】冒泡排序/选择排序/希尔排序

文章目录排序分类/排序算法的分类冒泡排序代码1&#xff1a;代码2&#xff08;优化代码3&#xff08;算法优化 --当次排序没有进行交换则退出循环代码4&#xff08;封装为方法代码5&#xff08;检测冒泡排序时间复杂度选择排序代码1代码2&#xff08;优化算法代码3&#xff08;…

FinalShell的下载安装简单使用

目录 一、下载 二、安装 三、简单使用 一、下载 下载地址&#xff1a;SSH工具 SSH客户端 1、进去后选择第一个 FinalSheel SSH工具,远程桌面加速软件,支持Windows,macOS,Linux,版本3.9.7,更新时间2022.10.26&#xff1b; 2、选择需要的版本下载&#xff0c;我选择的是&…

80. 循环神经网络的简洁实现

虽然从零开始实现循环神经网络对了解循环神经网络的实现方式具有指导意义&#xff0c;但并不方便。 本节将展示如何使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型。 我们仍然从读取时光机器数据集开始。 import torch from torch import nn from torch.nn i…

【SpringCloud13】SpringCloud Config分布式配置中心

1.概述 1.1 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务&#xff0c;每个服务的粒度相对较小&#xff0c;因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行&#xff0c;所以一套集中式的、动态的配置管理设施是必不…

PointNext论文解读

论文地址&#xff1a;https://arxiv.org/abs/2206.04670 github地址&#xff1a;GitHub - guochengqian/PointNeXt: [NeurIPS22] PointNeXt: Revisiting PointNet with Improved Training and Scaling Strategies 本文主要提出优化PointNet的两大关键点. 1) 好的训练策略 2…