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


相关文章
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
393 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
3004 2
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
1076 19
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
1752 83
|
存储 缓存 Java
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
318 9
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
【10月更文挑战第19天】在 Java 中,可以通过设置 HTTP 响应头来确保 JavaScript 文件不被浏览器缓存。方法包括:1. 使用 Servlet 设置响应头,通过 `doGet` 方法设置 `Expires`、`Cache-Control` 和 `Pragma` 头;2. 在 Spring Boot 中配置拦截器,通过 `NoCacheInterceptor` 类和 `WebConfig` 配置类实现相同功能。这两种方法都能确保每次请求都能获取到最新的 JavaScript 内容。
262 1
|
缓存 JavaScript 前端开发
Java 如何确保 JS 不被缓存
大家好,我是 V 哥。本文探讨了 Java 后端确保 JavaScript 不被缓存的问题,分析了文件更新后无法生效、前后端不一致、影响调试与开发及安全问题等场景,并提供了使用版本号、设置 HTTP 响应头、配置静态资源缓存策略和使用 ETag 等解决方案。最后讨论了缓存的合理使用及其平衡方法。
452 0
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
1204 0
|
Java
JAVA读取文件的几种方法
喜欢的朋友可以关注下,粉丝也缺。 InputStreamReader+BufferedReader读取字符串 InputStreamReader 将字节流转换为字符流。
1518 0

热门文章

最新文章