Class-Objekt aus File-Objekt erzeugen?

Status
Nicht offen für weitere Antworten.

norman

Top Contributor
Hallo zusammen,

bisher habe ich das Class-Objekt mit Class.forName("package.klasse"); erstellt. was mir fehlt ist eine idee, um von einem File-Objekt auf einen String oder so zu kommen, damit ich eine entsprechende Instanz von Class instanziieren kann. ???:L
 
B

Beni

Gast
Es geht auch einfacher:
Code:
import java.io.File;

...

Class<File> file = File.class;
 

norman

Top Contributor
äh..so war das nicht gemeint.
Das File-Objekt bezieht sich bspsw. auf C:\bla\blubb.class
und ich brauche das Class-Objekt für eben diese Klasse ..

(oder check ich nur nicht was du meinst?)
 
B

Beni

Gast
Achso, also mit einem "URLClassLoader" kannst du die Datei mal ins System bringen. Wenn du aber den Namen der Klasse nicht kommst, kommst du IMHO auch nicht über die *.class Datei heran (solange du sie nicht selbst parst, was aber nicht trivial ist :wink: ).

Wenn du die *.class-es selbst herstellst: ich würde da noch irgendeine Textdatei hinzupacken welche die Klassennamen beinhaltet.
 

norman

Top Contributor
hm..naja. eigentlich sollte es mal mit jeder beliebigen klasse funktionieren. kann natürlich verlangen den voll qualifizierten namen anzugeben, aber das ist ober-spacko :eek:/
auf jeden fall aber habe ich auch immer die entsprechende *.java datei zur verfügung. kann ich hieraus nicht irgendwie den vollen klassennamen ableiten oder eben ein Class-Objekt bekommen?

was hast du mit "ins system bringen" gemeint?

und: findClass(String name) in URLClassLoader verlangt wahrscheinlich auch den vollen namen der klasse, also mit package und so?
 

norman

Top Contributor
KSG9|sebastian hat gesagt.:
Die .java-Datei kannst du doch mit nem FileReader öffnen und nach "public class" suchen...
klar, aber das bringt mir kein ergebnis wie zb "java.lang.String" oder "myPackage.Testklasse". aber genau soetwas brauche ich offensichtlich, um ein Class-Object erstellen zu können :bahnhof:
 
B

Beni

Gast
Wenn du in der "*.java" noch nach "package" suchst, hast du den ersten Teil des Namens, und mit dem Ergebnis von "public class" zusammen solltest du einen ganzen Namen bauen können.

Mit dem "ins System bringen" meine ich: dem Programm sagen, wo die Class-Datei überhaupt ist, und sie laden können. Bei einem URLClassLoader kannst du ebenfalls "loadClass" benutzen, wie bei jedem anderen ClassLoader.
 

norman

Top Contributor
ja..okay. das klingt ganz logisch soweit.

trotzdem: wofür brauche ich die suche nach "public class"? macht hier ein extends zb einen unterschied? sonst kann ich ja einfach den dateinamen nehmen..

bsp:
Code:
package myPackage;
public class KlasseA extends java.lang.Compiler {
=> hier wäre der volle name doch "myPackage.KlasseA", oder? ???:L
 

Illuvatar

Top Contributor
Und was willst du bei sowas machen?

Code:
package myPackage; 
class KlasseA
{
...
}
public class KlasseB
{
...
}
 

Murray

Top Contributor
norman hat gesagt.:
hm..naja. eigentlich sollte es mal mit jeder beliebigen klasse funktionieren. kann natürlich verlangen den voll qualifizierten namen anzugeben, aber das ist ober-spacko :eek:/

Das mag ja ober-spacko sein (ich sehe zwar nicht, warum), aber wenn es mit beliebigen Klassen funktionieren soll, ist das m.E. der einzige Weg
 

norman

Top Contributor
@Illuvatar: daran habe ich auch schon gedacht. in meinem falle ist das aber kein problem, da das tool letztlich den quellcode der klasse in textdateien speichert, die wiederum in einen ordner mit dem klassennamen stecken (der wiederum im ordner mit dem namen des packages. egal.)
jedenfalls macht es zunächst nichts, wenn methoden von KlasseA im Ordner für KlasseB abgelegt sind. kann später einfach eine weitere ebene einführen (was ich sowieso vorhabe, wegen inneren klassen).

@Murray: ober-spacko, weil ich dann die datei nicht mehr mit einem JFileChooser auswählen kann, bzw. dieses auswählen ziemlich sinnlos ist. müsste ich doch von der auswahl (=> zb. einen File C:\eclipse\meinProjekt\meinPackage\meineKlasse.class) wieder 1 ebene nach oben gehen um dann meinPackage.meineKlasse.class laden zu können..

Danke trotzdem. werde es dann wohl erstmal so wie weiter oben beni beschrieben hat. also aus der quelldatei das package auslesen. mal schauen..
 

Murray

Top Contributor
Wenn Du mit dem JDK (nicht JRE) arbeitest, dann geht es möglicherweise auch ohne Source-File: javap.exe akzeptiert nicht nur vollständige Klassennamen, sondern - warum auch immer - eben auch den Namen ohne Package (und ohne die Erweiterung ".class").

Wenn Du jetzt also eine Class-Datei auswählt hast, dann könntest Du per Runtime.exec javap.exe starten und den Output auswerten. Alternativ könntest Du auch in den (eigentlich nicht öffentlichen) Sun-Klassen suchen, ob sich da nicht eine Klasse findet, die das etwas abkürzt - die Tools im jdk\bin sind ja meist nur Wrapper um Java-Klassen. Ein heisser Kandidat wäre sun.tools.javap.Main aus jdk\lib\tools.jar
 

norman

Top Contributor
huh.. :bahnhof:

habe es jetzt soweit, dass ich von der klasse den pfad kenne und den vollen namen:
Code:
		this.javaFile  = chooseJavaFile(); 					  // "C:\\eclipseworkspace\\StruktoGen\\struktoGen\\FileSplitter.java"
		this.classFile = getSuitableClassFile(this.javaFile); // "C:\\eclipseworkspace\\StruktoGen\\struktoGen\\FileSplitter.class"
		
		String fullClassName = getFullClassName();  // "struktoGen.FileSplitter"
		
		URL url = null;
		Class c;
		
		try {
			String path = this.classFile.getParentFile().getAbsolutePath();
			// path = C:\\eclipseworkspace\\StruktoGen\\struktoGen

			url = new URL("file://" + path); 
			URL[] urls  = {url}; 
			URLClassLoader ucl = new URLClassLoader(urls);

			c = ucl.loadClass(fullClassName); //ClassNotFoundException
			this.classObject = c;
		} catch (MalformedURLException e1) {
			e1.printStackTrace();
		}
allerdings komme ich mit dem URLClassLoader noch nciht so richtig klar (der Fehler steht ja im code kommentiert).
Ich müsste doch auch irgendwo angeben, in welchem Verzeichnis sich zb struktoGen.FileSplitter befindet. Aber wie kann ich das machen?
 

norman

Top Contributor
naja, inzwischen funktioniert folgendes:

Code:
this.javaFile  = chooseJavaFile(); 					  // "C:\\eclipseworkspace\\StruktoGen\\struktoGen\\FileSplitter.java"
this.classFile = getSuitableClassFile(this.javaFile); // "C:\\eclipseworkspace\\StruktoGen\\struktoGen\\FileSplitter.class"
		
String fullClassName = getFullClassName(); // "struktoGen.FileSplitter"	
Class c1 = Class.forName(fullClassName);  /* throws ClassNotFoundException */
this.classObject = c1;

.. aber eben nur, wenn ich im JFileChooser eine Datei auswähle, die in C:\eclipseworkspace\StruktoGen liegt.
wie kann ich hier also deinen anderen "pfad" angeben, in dem die gewählte klasse gesucht werden soll?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
O Objekt weitergeben Meth Class NullPointerException Java Basics - Anfänger-Themen 2
K OOP Vererbtes Field über Class Objekt Java Basics - Anfänger-Themen 3
S Methode soll ein neues Objekt vom Typ Class XYZ Java Basics - Anfänger-Themen 7
P Objekt aus einem Class Objekt erstellen? Java Basics - Anfänger-Themen 10
G objekt aus einer .class datei Java Basics - Anfänger-Themen 16
T IntelliJ / SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". Java Basics - Anfänger-Themen 4
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
123456789sssssaaaa Java Wrapper Class Java Basics - Anfänger-Themen 13
FHEFHJHFJH error: class names, 'summe_bsp', are only accepted if annotation processing is explicitly requested Java Basics - Anfänger-Themen 3
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
J Methode als Class anlegen Java Basics - Anfänger-Themen 7
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
G Could not initialize class “NoClassDefFoundError" Java Basics - Anfänger-Themen 2
Mr_Kleeblatt Operatoren if (arri[i] != "test.java"&& arri[i] != "test.class") Java Basics - Anfänger-Themen 3
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
J Klassen .class Datei öffnen Java Basics - Anfänger-Themen 31
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
O Verständniss Problem bei abstract class Java Basics - Anfänger-Themen 7
H .class Datei wird nicht ausgeführt Java Basics - Anfänger-Themen 2
H .jar unterschied .class Java Basics - Anfänger-Themen 3
J class version 52 und 56 Java Basics - Anfänger-Themen 6
L Fehler bei der AUsführung der .class Datei Java Basics - Anfänger-Themen 23
A Class not found - Jar liegt am classpath Java Basics - Anfänger-Themen 2
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Methoden Methoden einer public class AutoCompleteTextField verwenden Java Basics - Anfänger-Themen 14
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
D jsoup get class name mit leerzeichen Java Basics - Anfänger-Themen 7
D doc.seect jsouo bestimmtes class element finden Java Basics - Anfänger-Themen 1
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
N Fehlende .class Datei Java Basics - Anfänger-Themen 4
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
W Externe class in Eclipse importieren Java Basics - Anfänger-Themen 0
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
Javafan01 Dateiname und Public class Java Basics - Anfänger-Themen 4
S Klassen Class mit Funktionen importieren Java Basics - Anfänger-Themen 1
L jar, class, java und wieder zurück Java Basics - Anfänger-Themen 8
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
B Classpath Class lässt sich nicht öffnen Java Basics - Anfänger-Themen 3
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
S setText aus anderer class heraus Java Basics - Anfänger-Themen 6
L Classpath Zwei Bibliotheken enthalten gleiche .class Datei Java Basics - Anfänger-Themen 6
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
wilmaed protected class Java Basics - Anfänger-Themen 0
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
N class in class Java Basics - Anfänger-Themen 13
B Linux - Error: Could not find or load main class application.Main Java Basics - Anfänger-Themen 28
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
P could not find main class obwohl da Java Basics - Anfänger-Themen 17
UnityFriday method getPrevious in class List<ContentType> cannot be applied to given types Java Basics - Anfänger-Themen 29
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
D Compiler-Fehler error: .class expected Java Basics - Anfänger-Themen 2
S Dataflow von Start bis die SystemProperties class Java Basics - Anfänger-Themen 1
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
M Scanner class Java Basics - Anfänger-Themen 6
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
P Compiler-Fehler Could not load or find main class fehler Java Basics - Anfänger-Themen 15
J Gestaltung der GUI.class Java Basics - Anfänger-Themen 1
P Compiler-Fehler could not find or load main class Java Basics - Anfänger-Themen 5
Z Gleiches Verzeichnis für class und java unter Windows Muss? Java Basics - Anfänger-Themen 11
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
S Vererbung Fehlermeldung: the hierarchy of the type "class name" is inconsistent Java Basics - Anfänger-Themen 10
J Erste Schritte .class datei in meine form inkludieren Java Basics - Anfänger-Themen 3
M Class Datein aus einen Unterordner verwenden Java Basics - Anfänger-Themen 2
B .class-File mit Reflection auslesen Java Basics - Anfänger-Themen 8
C class in main aufrufen (SWT Oberfläche) Java Basics - Anfänger-Themen 5
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
D error: Class names, >>>HILFE, anfänger<<< Java Basics - Anfänger-Themen 4
M Class nach Namensänderung nicht mehr vorhanden Java Basics - Anfänger-Themen 6
P .class 2 .exe ? Java Basics - Anfänger-Themen 5
N Compiler-Fehler HundTestlauf class Fehler Java Basics - Anfänger-Themen 4
S Class File Editor gibt beim Start der Programms die Fehlermeldung Source not found aus Java Basics - Anfänger-Themen 1
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
H Umgebungsvariable In DOS-Box läuft die fehlerfreie Class-Datei nicht. Java Basics - Anfänger-Themen 5
J Compiler-Fehler bootstrap class path not set in conjunction with -source 1.6 Java Basics - Anfänger-Themen 2
J Interface compatible to a class Java Basics - Anfänger-Themen 7
Phil42 "Local variable i is accessed from within inner class" Java Basics - Anfänger-Themen 3
F .class expected Java Basics - Anfänger-Themen 3
S Erste Schritte Ausführen einer Class Datei Java Basics - Anfänger-Themen 6
C Klassen Minesweeper Problem. int needs to be final (inner class problem) Java Basics - Anfänger-Themen 3
K Frage zu Class Operator Java Basics - Anfänger-Themen 2
G Threads SuM Class Animation Java Basics - Anfänger-Themen 13
F Befehle von Java class ausführen Java Basics - Anfänger-Themen 3
G default class type Java Basics - Anfänger-Themen 3
Luk10 Generisches Class<...>[] Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben