implement Wildcard Entry
This commit is contained in:
parent
bfd2ffa3a5
commit
ee30abbf2d
@ -27,18 +27,18 @@ package com.gabongao.jvm.classpath;
|
|||||||
public abstract class Entry {
|
public abstract class Entry {
|
||||||
static String pathListSeparator = System.getProperty("path.separator");//system path separator
|
static String pathListSeparator = System.getProperty("path.separator");//system path separator
|
||||||
|
|
||||||
// public Entry newEntry(String path) {
|
public static Entry newEntry(String path) {
|
||||||
// if (path.contains(pathListSeparator)) {
|
// if (path.contains(pathListSeparator)) {
|
||||||
// return newCompositeEntry(path);
|
// return newCompositeEntry(path);
|
||||||
// }
|
// }
|
||||||
// if (path.contains("*")) {
|
// if (path.contains("*")) {
|
||||||
// return newWildcardEntry(path);
|
// return new WildcardEntry(path);
|
||||||
// }
|
// }
|
||||||
// if (path.contains(".jar") || path.contains(".zip") || path.contains(".JAR") || path.contains(".ZIP")) {
|
if (path.contains(".jar") || path.contains(".zip") || path.contains(".JAR") || path.contains(".ZIP")) {
|
||||||
// return newZipEntry(path);
|
return new Entry_Zip(path);
|
||||||
// }
|
}
|
||||||
// return newDirEntry(path);
|
return new Entry_Dir(path);
|
||||||
// }
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* read class from file
|
* read class from file
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
package com.gabongao.jvm.classpath;
|
package com.gabongao.jvm.classpath;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ┏┓ ┏┓+ +
|
* ┏┓ ┏┓+ +
|
||||||
* ┏┛┻━━━┛┻┓ + +
|
* ┏┛┻━━━┛┻┓ + +
|
||||||
@ -25,14 +28,39 @@ package com.gabongao.jvm.classpath;
|
|||||||
* Created by Imgaojp on 2017/2/17.
|
* Created by Imgaojp on 2017/2/17.
|
||||||
*/
|
*/
|
||||||
public class Entry_Composite extends Entry {
|
public class Entry_Composite extends Entry {
|
||||||
|
List<Entry> entries=new ArrayList<>();
|
||||||
|
|
||||||
|
public Entry_Composite() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Entry_Composite(String pathList) {
|
||||||
|
for (String str : pathList.split(super.pathListSeparator)
|
||||||
|
) {
|
||||||
|
Entry entry = Entry.newEntry(str);
|
||||||
|
entries.add(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] readClass(String className) {
|
public byte[] readClass(String className) {
|
||||||
return new byte[0];
|
for (Entry entry:entries
|
||||||
|
) {
|
||||||
|
byte[] bytes = entry.readClass(className);
|
||||||
|
if (bytes != null) {
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return null;
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (Entry entry:entries
|
||||||
|
) {
|
||||||
|
sb.append(entry.toString()+"\t");
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -61,14 +61,19 @@ public class Entry_Dir extends Entry {
|
|||||||
) {
|
) {
|
||||||
System.out.printf("%x",b);
|
System.out.printf("%x",b);
|
||||||
}
|
}
|
||||||
|
System.out.println();
|
||||||
return bos.toByteArray();
|
return bos.toByteArray();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
System.out.println("Class "+className+" not found"+" in "+absDir);
|
||||||
try {
|
try {
|
||||||
inputStream.close();
|
try {
|
||||||
|
inputStream.close();
|
||||||
|
} catch (Exception e1) {
|
||||||
|
System.out.println("inputStream does not exist");
|
||||||
|
}
|
||||||
bos.close();
|
bos.close();
|
||||||
} catch (Exception e1) {
|
} catch (Exception e1) {
|
||||||
e1.printStackTrace();
|
System.out.println("bos close error");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
71
src/com/gabongao/jvm/classpath/Entry_Wildcard.java
Normal file
71
src/com/gabongao/jvm/classpath/Entry_Wildcard.java
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
package com.gabongao.jvm.classpath;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.nio.file.DirectoryStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ┏┓ ┏┓+ +
|
||||||
|
* ┏┛┻━━━┛┻┓ + +
|
||||||
|
* ┃ ┃
|
||||||
|
* ┃ ━ ┃ ++ + + +
|
||||||
|
* ████━████ ┃+
|
||||||
|
* ┃ ┃ +
|
||||||
|
* ┃ ┻ ┃
|
||||||
|
* ┃ ┃ + +
|
||||||
|
* ┗━┓ ┏━┛
|
||||||
|
* ┃ ┃
|
||||||
|
* ┃ ┃ + + + +
|
||||||
|
* ┃ ┃ Code is far away from bug with the animal protecting
|
||||||
|
* ┃ ┃ + 神兽保佑,代码无bug
|
||||||
|
* ┃ ┃
|
||||||
|
* ┃ ┃ +
|
||||||
|
* ┃ ┗━━━┓ + +
|
||||||
|
* ┃ ┣┓
|
||||||
|
* ┃ ┏┛
|
||||||
|
* ┗┓┓┏━┳┓┏┛ + + + +
|
||||||
|
* ┃┫┫ ┃┫┫
|
||||||
|
* ┗┻┛ ┗┻┛+ + + +
|
||||||
|
* Created by Imgaojp on 2017/2/17.
|
||||||
|
*/
|
||||||
|
public class Entry_Wildcard extends Entry {
|
||||||
|
String baseDir = "";
|
||||||
|
List<Entry> entryList = new ArrayList<>();
|
||||||
|
|
||||||
|
public Entry_Wildcard(String path) {
|
||||||
|
File file = new File(path.substring(0, path.length() - 1));
|
||||||
|
baseDir = file.getAbsolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] readClass(String className) {
|
||||||
|
|
||||||
|
Path dir = Paths.get(baseDir);
|
||||||
|
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
|
||||||
|
for (Path e:stream
|
||||||
|
) {
|
||||||
|
String fileName = e.getFileName().toString();
|
||||||
|
if ((!e.toFile().isDirectory()) && (fileName.contains(".jar") || fileName.contains(".JAR"))) {
|
||||||
|
entryList.add(new Entry_Zip(e.getParent()+"\\"+fileName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
for (Entry entry : entryList
|
||||||
|
) {
|
||||||
|
entry.readClass(className);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return baseDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -63,12 +63,13 @@ public class Entry_Zip extends Entry {
|
|||||||
) {
|
) {
|
||||||
System.out.printf("%x",b);
|
System.out.printf("%x",b);
|
||||||
}
|
}
|
||||||
|
System.out.println();
|
||||||
return bos.toByteArray();
|
return bos.toByteArray();
|
||||||
}
|
}
|
||||||
entry = jarInput.getNextJarEntry();
|
entry = jarInput.getNextJarEntry();
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
System.out.println("Class "+className+" not found"+" in "+absPath);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
54
src/test/com/gabongao/jvm/classpath/Entry_CompositeTest.java
Normal file
54
src/test/com/gabongao/jvm/classpath/Entry_CompositeTest.java
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package test.com.gabongao.jvm.classpath;
|
||||||
|
|
||||||
|
import com.gabongao.jvm.classpath.Entry_Composite;
|
||||||
|
import junit.framework.Test;
|
||||||
|
import junit.framework.TestSuite;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry_Composite Tester.
|
||||||
|
*
|
||||||
|
* @author <Authors name>
|
||||||
|
* @since <pre>02/17/2017</pre>
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class Entry_CompositeTest extends TestCase {
|
||||||
|
public Entry_CompositeTest(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void tearDown() throws Exception {
|
||||||
|
super.tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Method: readClass(String className)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void testReadClass() throws Exception {
|
||||||
|
//TODO: Test goes here...
|
||||||
|
Entry_Composite entry_composite = new Entry_Composite("D:\\Programming\\Java\\JVM\\src\\com\\gabongao\\jvm\\classpath;D:\\Programming\\Java\\JVM\\out\\production\\JVM\\com\\gabongao\\jvm\\;D:\\Programming\\Java\\JVM\\lib\\commons-cli-1.3.1;C:\\Program Files\\Java\\jdk1.8.0_77\\jre\\lib\\jfxswt.jar");
|
||||||
|
entry_composite.readClass("javafx/embed/swt/CustomTransfer.class");
|
||||||
|
System.out.println(entry_composite.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Method: toString()
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void testToString() throws Exception {
|
||||||
|
//TODO: Test goes here...
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static Test suite() {
|
||||||
|
return new TestSuite(Entry_CompositeTest.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
53
src/test/com/gabongao/jvm/classpath/Entry_WildcardTest.java
Normal file
53
src/test/com/gabongao/jvm/classpath/Entry_WildcardTest.java
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
package test.com.gabongao.jvm.classpath;
|
||||||
|
|
||||||
|
import com.gabongao.jvm.classpath.Entry_Wildcard;
|
||||||
|
import junit.framework.Test;
|
||||||
|
import junit.framework.TestSuite;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry_Wildcard Tester.
|
||||||
|
*
|
||||||
|
* @author <Authors name>
|
||||||
|
* @since <pre>02/17/2017</pre>
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class Entry_WildcardTest extends TestCase {
|
||||||
|
public Entry_WildcardTest(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void tearDown() throws Exception {
|
||||||
|
super.tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Method: readClass(String className)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void testReadClass() throws Exception {
|
||||||
|
//TODO: Test goes here...
|
||||||
|
Entry_Wildcard entry_wildcard = new Entry_Wildcard("C:\\Program Files\\Java\\jdk1.8.0_77\\jre\\lib\\*");
|
||||||
|
entry_wildcard.readClass("javafx/embed/swt/CustomTransfer.class");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Method: toString()
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void testToString() throws Exception {
|
||||||
|
//TODO: Test goes here...
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static Test suite() {
|
||||||
|
return new TestSuite(Entry_WildcardTest.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user