java 实现读取txt文件,反射创建对象,android 手机缓存文件目录

简介: java 实现读取txt文件,反射创建对象,android 手机缓存文件目录

java 实现读取txt文件,反射创建对象



目录:


目的通过修改txt文件内容创建不同的对象,输出不同的记录;


8bd88ab1b163493399487b00f5b60233_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


上代码:


public class BaseBt {
    public BaseBt() {
        System.out.println("BaseBt构造");
    }
    public void disPlay(){
        System.out.println("BaseBt");
    }
}

public class CircularBt  extends BaseBt{
    public void disPlay(){
        System.out.println("CircularBt");
    }
}

public class SquareBt extends BaseBt{
    public void disPlay(){
        System.out.println("SquareBt");
    }
}

public class TriangleBt extends BaseBt{
    public void disPlay(){
        System.out.println("TriangleBt");
    }
}

package button;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
/**
 * @ProjectName: ArcfaceDemo
 * @Package: button
 * @ClassName: txttest
 * @Description: java类作用描述
 * @Author: 作者名
 * @CreateDate: 2021/9/28 0028 下午 10:43
 * @UpdateUser: 更新者:
 * @UpdateDate: 2021/9/28 0028 下午 10:43
 */
public class txttest {
    /**
     * 读取txt文件的内容
     * @param file 想要读取的文件对象
     * @return 返回文件内容
     */
    ///C:\butType.txt
    public static String txt2String(File file){
        StringBuilder result = new StringBuilder();
        try{
            BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
            String s = null;
            while((s = br.readLine())!=null){//使用readLine方法,一次读一行
//                result.append(System.lineSeparator()+s);
                result.append(s);
            }
            br.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return result.toString();
    }
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        File file = new File("C:\butType.txt");
        String byTypeClass=txt2String(file);
        System.out.println(byTypeClass);
        BaseBt baseBt = (BaseBt) Class.forName(byTypeClass).newInstance();
        baseBt.disPlay();
    }
}

ddb0ba018f284f09a37f812989c48477_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


什么是java反射



JAVA反射机制


Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。**反射被视为动态语言的关键。 **


Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。 有时候我们说某个语言具有很强的动态性,有时候我们会区分动态和静态的不同技术与作法。动态绑定(dynamic binding)、动态链接(dynamic linking)、动态加载(dynamic loading)等。然而“动态”一词其实没有绝对而普遍适用的严格定义,有时候甚至像面向对象当初被导入编程领域一样,一人一把号,各吹各的调。 一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。


  • Perl,Python,Ruby是动态语言
  • C++,Java,C#不是动态语言。


尽管在这样的定义与分类下Java不是动态语言,它却有着一个非常突出的动态相关机制:Reflection。这个字的意思是“反射、映象、倒影”,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。这种“看透class”的能力(the ability of the program to examine itself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语。 Java如何能够做出上述的动态特性呢?这是一个深远话题,本文对此只简单介绍一些概念。整个篇幅最主要还是介绍Reflection APIs,也就是让读者知道如何探索class的结构、如何对某个“运行时才获知名称的class”生成一份实体、为其fields设值、调用其methods。本文将谈到java.lang.Class,以及java.lang.reflect中的Method、Field、Constructor等等classes。


java.lang.ClassNotFoundException



使用Class.forName(byTypeClass).newInstance();过程中总是不行,一定要进行debug;发现路径不对;对了/n;


d7e544db8fe243a2918c03e5de136e29_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

AS运行main()方法报错:SourceSet with name ‘main’ not found


fa1eae2aa25e4008bac35e61a432ea48_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


解决方法:在.idea文件夹下的gradle.xml文件中添加

然后重新运行就可以了


c3c1eb8d9a5a424bb320fa9308ef3031_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


json文件优势



{
"code": "0000",
"data": {
"biRate": "0.32",
"carInfoByPython": {
"code": "0000",
"data": {
"biEndDate": "2018-10-05",
"brandName": "长安SC7162A4轿车",
"carkindCode": "客车",
"ciEndDate": "2018-10-05",
"companyCode": "picc",
"damageBi": 0,
"damageCi": 0,
"engineNo": "84BE17915",
"enrollDate": "2008-10-07",
"fuelType": "A ",
"result": true
}


Context 的意思和作用



我是通过两个例子才理解的;


一个是Android中assert的资源文件;


83387dfd86fb44328b13ceb0dde75a2f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


加载方式:AssetManager assetManager = context.getAssets();

android 打包apk将assert打包进apk,上下文就是手机中安装包目录;


第二种写java 通过main 方法调用本地文件


不需要写上下文,你的电脑环境就是你的上下文;


c43f2aeaf29d448ea23a1d1e195dbc33_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


Android文件系统管理— /storage/emulated/0/Android/data/{packgename}



/mnt/sdcard/Android/data/com.zhongxin.learninglibrary/cache/header_image/data/data/com.zhongxin.learninglibrary


ce29851856434c63900ec535c4a58b94_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png8ff368a4d9e04fc092880c8eafa157b3_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


1996998a4381412896fe4dea4b78ac11_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


相关文章
|
5月前
|
XML 编解码 Android开发
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
436 0
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
618 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
600 1
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
Android开发
Android在rootdir根目录创建自定义目录和挂载点的方法
本文介绍了在Android高通平台的根目录下创建自定义目录和挂载点的方法,通过修改Android.mk文件并使用`LOCAL_POST_INSTALL_CMD`变量在编译过程中添加目录,最终在ramdisk.img的系统根路径下成功创建了`/factory/bin`目录。
872 1
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
381 1
|
安全 Java 编译器
Android面试题之Java 泛型和Kotlin泛型
**Java泛型是JDK5引入的特性,用于编译时类型检查和安全。泛型擦除会在运行时移除类型参数,用Object或边界类型替换。这导致几个限制:不能直接创建泛型实例,不能使用instanceof,泛型数组与协变冲突,以及在静态上下文中的限制。通配符如<?>用于增强灵活性,<? extends T>只读,<? super T>只写。面试题涉及泛型原理和擦除机制。
181 3
Android面试题之Java 泛型和Kotlin泛型
|
Android开发
Cannot create android app from an archive...containing both DEX and Java-bytecode content
Cannot create android app from an archive...containing both DEX and Java-bytecode content
216 2
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
3709 1
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
519 4