android判断文件是否存在跳转不同activity
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
android studio版本2021.2.1Patch 2
例程名称ActivityJump
完成日期2023.1.17
一直在完善一个小东西也是不断的在学习。之前做的那个桌面日历天气老旧安卓手机发挥余热做桌面时钟摆件使用有一个问题就是每次启动app都要重新选择显示模式和城市虽然不麻烦但没必要所以我就想改一下原理大概是这样如果已经选择一次模式和城市了app启动过一次再次启动的时候就不要选择了直接用上次的模式和城市显示就可以了。如果需要修改城市可以在显示界面进行修改。先解决第二次启动不用重新选择的问题。
例程实现
程序启动的时候启动一个空的activity并判断文件是否存在。
如果不存在第一次启动该文件不存在则正常进入程序并创建文件file.txt。
如果文件存在第二次启动时该文件存在则直接显示另一页面并显示文件内容文件内容每次都是覆盖前一次内容。
知识要点1、文件存取、判断文件是否存在的操作2、Activity之间跳转。
问题我也不知道这是不是最好的方法反正暂时只会这样。
具体过程
建一个项目名称为activityjump.主要的activity
新建一个关于文件读写的类filehelper.对文件读写操作。(本来可以不用这个这个是学来的懒的改)
activity_main.xml里面添加一个文件一个按钮写入文件一个textview文件内容一个edittext。布局如下图
在edittext里面输入内容后点击写入文件按钮把文件写入file.txt,该文件存在于系统中系统非root不可访问。
新建一个空activityfileexist,用来显示file.txt内容。也是判断文件存在之后跳转的别一个页面。只有两个textview一个显示文件存在的结果另一个显示文件内容。如下图
新建一个空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("文件不不不不存在。");
}
}
说明
File f=new File(getApplicationContext().getFilesDir(),"file.txt");不指定文件路径要这么写不然app总找不到文件为什么这么写还没研究。
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模式为不换行追加。
例程动画演示