简介本文是由上篇Android LOCAL_JAVA_RESOURCE_FILES 的妙用 延伸出来的,主要讲解ClassLoader.getSystemResourceAsStream的底层实现。本文篇幅较长,主要是源码较多,如果不贴源码,又不好理解,所以为了理解深刻,请慢慢细读。源码分析先来看下ClassLoader的代码,然后我们去分析它的实现过程。libcore/libdvm/src/ma
转载 2024-10-16 16:10:04
88阅读
一、背景  我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。  在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar以后,即使将资源文件一并打包,这些东西也找不出来了。 myproject     |___src   |___edu.hxraid       |__Resource.java |___bin   |___resource res.tx
转载 2024-08-05 14:31:31
341阅读
JVM在加载类的时候,都是通过ClassLoader的loadClass()方法来加载class的,loadClass(String name)方法: 使用的是双亲委托模式: jvm启动时,会启动jre/rt.jar里的类加载器:bootstrap classloader,用来加载java核心api;然后启动扩展类加载器ExtClassLoader加载
转载 2023-11-16 11:34:56
86阅读
今天说的是讲ClassLoader,但今天讨论的目的不是要让大家明白ClassLoader究竟是怎么回事, 而是希望大家能够对java的底层机制有个了解。这里说的底层机制是指jvm之上的java体系,jvm层面的内容我们不讨论。ClassLoader的内容实际上是比较广的,不可能通过一两次说教就能明白。今天这个课程实际上是帮助大家把java的基本功打扎实一些,这样你在工作中,对应用各种框架有更深
转载 2024-06-24 09:37:36
19阅读
String path = test.class.getClassLoader().getResource("xx").getPath();结果:/C:/20150112_yaomy/workspace-yaomy/lucene_test/bin/xx
原创 2015-12-18 13:48:48
288阅读
自定义classloader实现java程序加密背景 项目使用java语言开发,发布会整合到C++客户端,直接安装到用户机器上,不同于之前常见的后端服务发布,这种发布能让用户直接接触到java发布,由于java语言的特性,有可能出现java发布包被反编译的情况,所以决定对java发布进行加密处理。ClassLoader概述 java编译后的class文件由classloader(类加载器)加
小引子最近做了一个根据同一模块的不同jar版本做同时测试的工具,感觉挺有意思,特此记录。类加载器(ClassLoader)是啥?把类加载阶段中的“通过一个类的全限定名(博主注:绝对路径)来获取描述此类的二进制字节流”这个动作放在Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块成为”类加载器“。摘自周志明的《深入理解Java虚拟机》ClassLoader
转载 2024-02-02 23:51:12
82阅读
我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar以后,即使将资源文件一并打包,这些东西也找不出来了。看看下面的代码://源代码1: package edu.hxraid; import java.io.*; public class Resource { public void
转载 2024-07-05 20:47:16
111阅读
java程序加密jar及war加密
转载 2023-06-26 11:56:47
297阅读
classloader是什么      我的理解classloader就是加载我们的类到内存的类,他主要就是寻找资源,即找到在他能搜索到的路径中,有没有我们的类。有的话就加载到内存。系统的classloader系统的classloader有三种Bootstrap ClassLoader     负责加载java基础类,
转载 2024-01-12 11:54:17
35阅读
在linux下运行的程序经常需要获取自己的绝对路径,程序可能需要引用外部的资源文件,比如在../skin/目录下的图片,这样普通程序是没有问题,但当程序在安装到/usr/bin/目录中,或者为程序建立连接以后就会出现问题,我们可以直接通过运行程序的链接来运行程序,这样../skin/目录就找不到了,因为当前目录并不是程序所在的目录,而且链接所在的目录,所以在它的上一级目录中根本找不到skin目录,
转载 9月前
85阅读
一、解决方案换成XXX.class.getClassLoader().getResourceAsStream("a.txt")即可。二、场景复现src/main/resource下存在文件a.txt,项目类中static 方法中读取该文件。ClassLoader.getSystemResourceAsStream("a.txt")获取不到资源文件三、原因剖析getResourceAsStream会
转载 2024-03-05 22:25:45
274阅读
# Java Classloader:加载 jar 中的 jar Java 的 ClassLoader 是一种非常强大的功能,允许开发者在运行时动态加载类。在某些情况下,比如在一个 jar 内部还有另一个 jar ,直接通过常规方式会遇到困难。本文将帮助你理解如何通过 Java ClassLoader 加载 jar 中的 jar。 ## 流程概述 在实现这一功能之前,我们首先需要了解
原创 11月前
103阅读
在一些框架中经常看到下边代码 这种获取资源的写法,非常迷惑,今天运气不错在网上找到了一篇相关的文章。private static URL getResource(Class callingClass, String resourceName) { URL url = Thread.currentThread().getContextClassLoader().getResour
转载 2024-05-24 16:46:13
28阅读
简介一个完整的Java程序是由多个.class文件组成,在程序运行过程中,需要将这些.class文件加载到JVM中才可以使用,而ClassLoader就是负责加载.class文件的。何时被加载Java程序启动时,不会一次性加载程序中所有的.class文件,而是在运行过程中动态的加载相应的类到内存中; 通常情况下,.class文件会在以下两种情况被ClassLoader主动加载到内存中: 调用类构造
转载 2023-12-02 14:51:25
596阅读
JVM的运行机制JVM是用于运行Java字节码的虚拟机,Java源文件再通过编译器之后被编译成相应的.class文件,.class文件又被JVM中的编译器编译成机器码在不同的操作系统上运行。每种操作系统的解释器都是不一样的,但基于解释器的虚拟机是相同的,这也是Java能够跨平台的主要原因。Java程序的具体运行过程如下: 1.Java源文件被编译器编译成字节码文件。 2.JVM把字节码文件编译成相
转载 2023-11-24 00:26:55
47阅读
一、什么是ClassLoader? 众所周知,当我们编写一个Java程序时,它是由几个程序组织的一个完整的Java应用程序。类文件。程序运行时,会调用程序的一个入口函数来调用系统的相关函数,而这些函数封装在不同的类文件中,所以我们经常需要从这个类文件中调用另一个类文件中的方法。如果另一个文件不存在,程序启动时,不会一次性加载程序使用的所有类文件,而是根据程序的需要通过Java的ClassLoade
转载 2024-01-12 12:57:39
53阅读
# 如何在Java中获取jarresource目录路径 ## 简介 在Java开发中,有时候我们需要获取jar中的资源文件,比如配置文件或者图片等。今天我将教你如何在Java中获取jarresource目录的路径。 ## 流程图 ```mermaid flowchart TD A(开始) B(加载资源) C(获取资源路径) D(结束) A -
原创 2024-04-06 05:34:55
474阅读
我们大家都知道,每个运行中的线程都有一个成员contextClassLoader,用来在运行时动态地载入其它类。 系统默认的contextClassLoader是systemClassLoader,所以一般而言java程序在执行时可以使用JVM自带的类、$JAVA_HOME/jre/lib/ext/中的类和$CLASSPATH/中的类,对于非默认的jar,一般只能手动在配置环境添加。
原创 2007-11-12 15:38:00
8744阅读
Class类下的getResource和ClassLoader类下的getResource方法使用和区别通过getResource(String name)方法,我们能获得一个URL对象读取资源先说结论:1. MyClass.class.getResource(“xxx”)方法中传的参数如果是相对路径,那么传递的路径是相对于MyClass而言2. MyClass.class.getResource
  • 1
  • 2
  • 3
  • 4
  • 5