Produktnamen von Laufwerken

Status
Nicht offen für weitere Antworten.
S

Sabine18

Gast
Hey,

wie kann ich den Produktnamen eines Laufwerks auslesen?
mit listroots oder filesystemview bekomm ich es nicht hin. würde vielleicht auch schon reichen wenn ich den laufwerksbuchstaben erstma hab aber ich bekomm es einfach nicht hin NUR die laufwerke zu bekommen. also ich bekomm die festplatten auch immer mit ausgegeben... :(

bis dann,
sabine :roll:
 

The_S

Top Contributor
Von 20.000 mal pushen wirds auch net besser (naja, evtl. doch, ich antworte ja jetzt :p ). Wenn niemand eine Antwort weiß, dann würde ich mal behaupten es geht mit den Java-Boardmitteln schlichtweg nicht. Eine Festplatte ist schließlich auch ein Laufwerk und auch (es besteht zumindest die Möglichkeit das) physikalisch am selben Controller wie CD oder DVD-Laufwerk angeschlossen.

Evtl. kann man das in C++ rausfinden (Hardware näher), das wäre dann aber Plattformabhängig und du müsstest JNI verwenden.Könnte auch sein, dass JDIC das kann, das kann so einiges. Aber ohne garantie!
 
S

Sabine12

Gast
naja okay...
ja also mit c gehts auf jeden kann ich aber leider nicht verwenden... schade!
gut danke soweit!
 

The_S

Top Contributor
Wie gesagt C++ verwenden und über JNI an Java anbinden.

BTW, du wirst immer Jünger ;) .
 
S

Sabine20

Gast
hi!
hab noch ne andere methode gefunden die laufwerke rauszufinden! geht aber nur auf windows...

is zwar bissel blöd gelöst aber erstma egal...

Code:
public class laufwerk {

	public static void lesedateierstellen() {		
		
		//Datei in der die Laufwerke stehen erstellen
		File myfile = new File("C:\\showdrive.bat");
		try {
			BufferedWriter buf = new BufferedWriter(new FileWriter(myfile));
			buf.write("TITLE CD/DVD Laufwerke werden gesucht...");
				buf.newLine();
			buf.write("cd C:\\");
				buf.newLine();
			buf.write("[color=red]wmic cdrom list brief > drive.txt[/color]");
				buf.newLine();
			//buf.write("del showdrive.bat");
			//	buf.newLine();
			buf.write("Exit");
			buf.close();
			
			Runtime.getRuntime().exec("cmd /c start C:\\showdrive.bat");
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			isoimage.delete("C:\\showdrive.bat");
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	
	public static String dateilesen() {	
		
//		aus datei lesen
		File datei = new File("C:\\drive.txt");
		try {
			BufferedReader read = new BufferedReader(new FileReader(datei));
			try {
				String tmp="";
				while((tmp =read.readLine()) != null){
				System.out.println(tmp);
				}
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return "moep";
	}
	
}

das problem ist der text in der drive.txt wird in dem format "uft bom" oder so gespeichert aber java liest nur ansi oO
wenn ich also die datei auslesen will kommt der text mit lauter komischen zeichen... wenn ich diesen text aber mit notepad2 wieder in ansi formartiere bekomm ich ihn genau so wie er in der txt steht wieder!

so jetzt die frage wie kann ich drive.txt in ansi speichern?
 

The_S

Top Contributor
Warum liest du nicht einfach gleich über den Process von Runtime den Output deiner Batch mit!? Bzw. warum erstellst du überhaupt eine Batch? Schieß den Befehl doch über die Runtime ab und les den Ausgabe-Stream des Befehls gleich im Programm selbst. Sonst müllst du die Platte von deinem User nur unnötig zu!

Du kannst aber auch das Coding setzen!
 
G

Guest

Gast
habs jetzt so:

Code:
public static void laufwerkhier(){
	
			String bam = "";
			Process p;
		
				try {
					p = Runtime.getRuntime().exec("cmd wmic cdrom list brief");	
						      
		      BufferedReader in;
		      	    
		         in = new BufferedReader(
		           new InputStreamReader(p.getInputStream()));		        
		       
					while ((bam = in.readLine()) != null) {
					  System.out.println(bam); System.out.flush();
					}
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}	  
				
	}

in der ausgabe erscheinen aber nur die ersten zeilen der commandozeile aber nich die infos die ich brauch!
wenn ich ein /c hinter dem cmd mache kommt garnix?! mit start genau das selbe!
weiß jemand ne lösung?
 
S

Sabine15

Gast
also wenn ich in der console nur cmd /c "wmic cdrom list brief" eingebe zeigt er mir zwar in der konsole nur das was ich angezeigt bekommen will aber java gibt es mir mit dem obigen code nicht aus?! WARUM?
 

The_S

Top Contributor
Das wüsste ich auch gerne mal. Sollte so korrekt sein, weil wenn ich statt deinen Befehl einfach ein "echo blub" mache, bekom ich alles korrekt angezeigt. Er hängt sich irgendwo auf, scheint ein deadlock zu sein, evtl. wegen fehlenden abschließenden zeilenumbruch ???:L
 

thE_29

Top Contributor
1. gibt bei mir (XP PRO SP1) der nur einen Fehler aus!
2. schaut mal im taskmgr ob sicher Prozess überhaupt beendet! Bei mir läuft der und läuft..
 

The_S

Top Contributor
thE_29 hat gesagt.:
1. gibt bei mir (XP PRO SP1) der nur einen Fehler aus!

joa, wmic is da so ne Sache.

1.) Erst ab XP verfügbar
2.) Nicht immer mitinstalliert
3.) Bei der kleinsten, fehlerhaften Einstellung funktioniert das nicht bzw. nicht richtig. Hab ich schon n paar mal erlebt.

thE_29 hat gesagt.:
2. schaut mal im taskmgr ob sicher Prozess überhaupt beendet! Bei mir läuft der und läuft..

Auch wenn er nicht beendet ist (hab jetzt auch mal künstlich auf den Outputstream nochmal n flush ausgeführt und/oder n Zeilenumbruch in nem seperaten Thread geschrieben), sollte wenigstens die Ausgabe erscheinen ???:L
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben