Zugriff Verweigert bei Kopieroperation?

florilu

Aktives Mitglied
Hallo ihr,

ich habe ein kleines Problem, ich habe für meine Mod jetzt einen Installer geschrieben, da mich mehrere drum gebeten haben, alles funktioniert einwandfrei, nur wenn ich versuche die Datei in einen Ordner zu kopieren kriege ich folgende Meldung:

Code:
java.io.FileNotFoundException: C:\Users\Florian\AppData\Roaming\.minecraft\EBGBackup (Zugriff verweigert)
at java.io.FileOutputStream.open(Native Method)
	at java.io.FileOutputStream.<init>(Unknown Source)
	at java.io.FileOutputStream.<init>(Unknown Source)
	at CopyFile.copy(CopyFile.java:29)
	at Main.main(Main.java:47)

Bei folgendem Code:
Main.java
Java:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Scanner;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class Main
{
	static String path = System.getProperty("user.home") + File.separatorChar + "AppData/";
	static String mainFolder = System.getProperty("user.home") + File.separatorChar + "Appdata/Roaming/.minecraft/";
	static String test = System.getProperty("user.home");
	
	static File backup = new File(path + "Roaming/.minecraft/EBGBackup/");

	static File minecraft = new File(path + "Roaming/.minecraft/bin/minecraft.jar");
	static File mcOut = new File(path + "Roaming/.minecraft/EBGBackup/");
	static File finalOut = new File(path + "Roaming/.minecraft/bin/minecraft.jar");

	static Scanner scanner = new Scanner(System.in);
	
	static File readme;
	static FileWriter writer;

	public static void main(String[] args) throws Exception {
		
		System.out.println("EBG Installation Assistant for EBG V1.2.4 (1.4.7) by Florilu");
		System.out.println("Options: ");
		System.out.println("Install:     [1]");
		System.out.println("Refresh jar: [2]");
		System.out.println("Exit:        [3]");
		System.out.print("Choose Optionnumber: ");
		int num = scanner.nextInt();
		if (num == 1) {
			if(!backup.exists()){
				backup.mkdir();
			}
			
			if(backup.exists()){
				System.out.println(minecraft + " " + mcOut);
				System.out.println("Backupping your jar!");
				check();
				CopyFile.copy(minecraft, mcOut);
				check();
				System.out.println("Backup Complete!");
			}
			new Main().extractArchive(new File("files/install.zip"), new File(path + "Roaming/.minecraft/bin"));
			System.out.println("ExtraBiomesGen has been installed.");
		}
		if (num == 3) {
			System.exit(0);
		}
		if (num == 2){
			if (!minecraft.exists()) {
				new Main().extractArchive(new File("files/refresh.zip"), new File(path + "Roaming/.minecraft/bin"));
				System.out.println("Your jar has been refreshed!");
			}else{
				minecraft.delete();
				new Main().extractArchive(new File("files/refresh.zip"), new File(path + "Roaming/.minecraft/bin"));
				System.out.println("Your jar has been refreshed!");
			}
		}
	}
	
	public static void check(){
		System.out.println("CanRead:" + mcOut.canRead());
		System.out.println("CanWrite" + mcOut.canWrite());
		System.out.println("Exists:" + mcOut.exists());
		System.out.println("AbsolutePath:" + mcOut.getAbsolutePath());
		System.out.println("IsDirectory:" + mcOut.isDirectory());
	}
	
	public static void write() throws IOException{
		String text = "The Backupfunction is still WIP, be sure you'll backup your jar by yourself!";
		String dateiName = mainFolder + "EBGBackup/README.txt";
		FileOutputStream schreibeStrom = new FileOutputStream(dateiName);
		for (int i=0; i < text.length(); i++){
			schreibeStrom.write((byte)text.charAt(i));
		}
		schreibeStrom.close();
	}
	
	public void extractArchive(File archive, File destDir) throws Exception {
		if (!destDir.exists()) {
			destDir.mkdir();
		}
		
		minecraft.delete();
		
		write();

		ZipFile zipFile = new ZipFile(archive);
		Enumeration entries = zipFile.entries();

		byte[] buffer = new byte[16384];
		int len;
		while (entries.hasMoreElements()) {
			ZipEntry entry = (ZipEntry) entries.nextElement();

			String entryFileName = entry.getName();

			if (entry.isDirectory()) {
				File dir = new File(destDir, entryFileName);
				// System.out.println(dir);
				if (!dir.exists()) {
					dir.mkdir();
				}
			} else {

				BufferedOutputStream bos = new BufferedOutputStream(
						new FileOutputStream(new File(destDir, entryFileName)));

				BufferedInputStream bis = new BufferedInputStream(zipFile
						.getInputStream(entry));

				while ((len = bis.read(buffer)) > 0) {
					bos.write(buffer, 0, len);
				}

				bos.flush();
				bos.close();
				bis.close();
			}
		}
	}
}

CopyFile.java
Java:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.ByteChannel;
import java.nio.channels.FileChannel;
public class CopyFile {
	static long chunckSizeInBytes;
	boolean verbose;
	public CopyFile(){
		this.chunckSizeInBytes = 1024 * 1024; //Standard: Buffer 1MB
		this.verbose = false; //Statistics about Copy Process
	}
	public CopyFile(boolean verbose){
		this.chunckSizeInBytes = 1024 * 1024; //Standard: Buffer 1MB
		this.verbose = verbose; //Statistics about Copy Process
	}
	public CopyFile(long chunckSizeInBytes){
		this.chunckSizeInBytes = chunckSizeInBytes; //Custom Buffer (Bytes)
		this.verbose = false; //Statistics about Copy Process
	}
	public CopyFile(long chunckSizeInBytes, boolean verbose){
		this.chunckSizeInBytes = chunckSizeInBytes; //Custom Buffer (Bytes)
		this.verbose = verbose; //Statistics about Copy Process
	}
	public static void copy(File source, File destination) {
		try {
			FileInputStream fileInputStream = new FileInputStream(source);
			FileOutputStream fileOutputStream = new FileOutputStream(destination);
			FileChannel inputChannel = fileInputStream.getChannel();
			FileChannel outputChannel = fileOutputStream.getChannel();
			transfer(inputChannel, outputChannel, source.length(), false);
			fileInputStream.close();
			fileOutputStream.close();
			destination.setLastModified(source.lastModified());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void transfer(FileChannel fileChannel, ByteChannel byteChannel, long lengthInBytes, boolean verbose)
			throws IOException {
		long overallBytesTransfered = 0L;
		long time = -System.currentTimeMillis();
		while (overallBytesTransfered < lengthInBytes) {
			long bytesTransfered = 0L;
			bytesTransfered = fileChannel.transferTo(overallBytesTransfered, Math.min(chunckSizeInBytes, lengthInBytes - overallBytesTransfered), byteChannel);
			overallBytesTransfered += bytesTransfered;
			if (verbose) {
				System.out.println("overall bytes transfered: " + overallBytesTransfered + " progress " + (Math.round(overallBytesTransfered / ((double) lengthInBytes) * 100.0)) + "%");
			}
		}
		time += System.currentTimeMillis();
		if (verbose) {
			System.out.println("Transfered: " + overallBytesTransfered + " bytes in: " + (time / 1000) + " s -> " + (overallBytesTransfered / 1024.0) / (time / 1000.0) + " kbytes/s");
		}
	}
}

Und mein Debugmode sagt:
Code:
CanRead:true
CanWritetrue
Exists:true
AbsolutePath:C:\Users\Florian\AppData\Roaming\.minecraft\EBGBackup
IsDirectory:true

Alles bezieht sich auf:
Java:
static File mcOut = new File(path + "Roaming/.minecraft/EBGBackup/");
In diesen Ordner soll die minecraft.jar reinkopiert werden.

Wie kann ich das Problem lösen? Ich habe mich schon stundenlang durchgegooglet aber nichts gefunden :(

MfG:
Florilu
 

florilu

Aktives Mitglied
Das Witzige an der Sache ist, ich kann einfach ohne Probleme irgendwelche Dateien drin erstellen oder löschen oder mehrere Unterordner anlegen, aber beim Kopieren der minecraft.jar will es nicht...
Ist da vllt was an dem Pfad falsch? Ich habe momentan eher das Gefühl, da der Ordner in der Laufzeitumgebung geöffnet ist, und das dass Programm versucht den Ordner zur .jar zu ändern? Denn dann kriegt man auch so wenn man das selbst macht Probleme. Und mit Adminrechten habe ich es auch versucht, hat leider auch nicht geklappt.
 
T

tröööt

Gast
Das Problem ist wohl, dass du Administratorrechte brauchst um in dem Ordner herumzuändern. Request admin privileges for Java app on Windows Vista - Stack Overflow

du hast aber schon im code gelesen das hier USER.HOME genutzt wird ... oder ? und auch unter windows hat man genau wie unter unix in USER.HOME und allen unter-ordnern VOLLZUGRIFF ... sogar noch mehr als bei unix ... denn wenn man unter unix als root in nem home-dir was erstellt hat auch nur root access .. unter win hat ein user selbst dann access wenn etwas vom admin gemacht wurde ...

DAS scheidet also als fehlerquelle definitiv aus ..


@TO

naja ... lesen sollte man können ...

[java=20]static File minecraft = new File(path + "Roaming/.minecraft/bin/minecraft.jar");[/code]
verweist ganz klar auf eine DATEI
[java=21]static File mcOut = new File(path + "Roaming/.minecraft/EBGBackup/");[/code]
makiert jedoch klar ein VERZEICHNIS
[java=28]FileInputStream fileInputStream = new FileInputStream(source);
FileOutputStream fileOutputStream = new FileOutputStream(destination);[/code]
ergibt dann also mal mit eingesetzten parametern
[java=28]FileInputStream fileInputStream = new FileInputStream(new File(path + "Roaming/.minecraft/bin/minecraft.jar"));
FileOutputStream fileOutputStream = new FileOutputStream(new File(path + "Roaming/.minecraft/EBGBackup/"));[/code]

so wird der fehler offensichtlich : du versuchst das VERZEICHNIS "Roaming/.minecraft/EBGBackup/" als DATEI mit einem DATEI-OUTPUT-STREAM zu öffnen ... und DAS GEHT NICHT !

"ZUGRIFF VERWEIGERT" kommt vermutlich daher weil java versucht ein verzeichnis-handle als output-file zu öffnen ... was schlicht nicht unterstützt wird ... aber für genau infos müsste man mal in den source der native-method und ins MSDN gucken ...

die lösung ist also das du
entweder zeile 21 so änderst das mcOut auf eine DATEI zeigt ... NICHT auf ein VERZEICHNIS
oder du copy() so abwandelst das es auch als VERZEICHNIS entgegen genommen wird und du darauf mit "new File(File, String)" einen neuen handle auf eine dann zu erstellen DATEI angibst ...

und btw : zeile 20 und 22 zeigen auf das selbe objekt ... warum also zwei mal damit speicher verschwenden ? tipp-fehler ? oder ist das so gewollt ... wenn ja : eins von beien kannst du löschen
genau wie 18 und 21 .. zeigen auch beide aufs selbe ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Daten kopieren mit nio - Zugriff verweigert Allgemeine Java-Themen 8
C java.io.FileNotFoundException: (Zugriff verweigert) Allgemeine Java-Themen 14
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
W Klassen Zugriff auf ein Textfile aus allen Klassen. Allgemeine Java-Themen 2
izoards Zugriff auf gemeinsame Ressource (CSV-File) Allgemeine Java-Themen 3
S Java Zugriff auf Netzwerklaufwerk Allgemeine Java-Themen 1
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
O Zugriff auf mySQL ohne JDBC Allgemeine Java-Themen 3
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
B Maven Zugriff auf files aus einem kompilierten jar Allgemeine Java-Themen 15
S Zugriff auf jUnit Test Suite Runner-Instanzen innerhalb von Test Classes Allgemeine Java-Themen 7
W Zugriff auf Objektvariablen vs. Übergabe Allgemeine Java-Themen 3
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
Tommy Nightmare HTTP Zugriff auf Internetseite im Loginbereich Allgemeine Java-Themen 5
H Zugriff auf PHP Allgemeine Java-Themen 4
B DB-Zugriff einer Webanwendung funktioniert nicht mit Java 7 Allgemeine Java-Themen 2
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
O JNA Zugriff auf Funktion aus DLL Allgemeine Java-Themen 0
O Zugriff auf Windows Zertifikatstore Allgemeine Java-Themen 2
M Kein Zugriff auf microSD Karten Allgemeine Java-Themen 4
T Zugriff auf Datenbank Allgemeine Java-Themen 1
J Zugriff auf IMAP GMail Konto scheitert. Allgemeine Java-Themen 2
P Frontend- Zugriff auf WS- Backend Allgemeine Java-Themen 0
U Zugriff auf Datei sperren Allgemeine Java-Themen 5
N Best Practice Semi-Synchronized Zugriff Allgemeine Java-Themen 0
C Zugriff auf Event felder Allgemeine Java-Themen 0
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
T JNI: kein Zugriff auf VM in Callback-Methode eines Windows-Hooks Allgemeine Java-Themen 3
S Dynamischer Zugriff Allgemeine Java-Themen 4
Minonos Einem Programm Zugriff auf bestimmte Ordner geben Allgemeine Java-Themen 5
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
H Programierstil: static - Zugriff vs. Staticzugriff Allgemeine Java-Themen 24
V Zugriff auf den Objekterzeuger? Allgemeine Java-Themen 4
M Zugriff zweier Threads auf diesselbe Methode Allgemeine Java-Themen 16
B Zugriff auf eine HashMap Allgemeine Java-Themen 4
B JApplet Zugriff auf Local Storage des Browser? Allgemeine Java-Themen 2
D Zugriff auf Array-Liste Allgemeine Java-Themen 19
M gleichzeitiger Zugriff auf eine Textdatei Allgemeine Java-Themen 6
D Eclipse Kein Zugriff auf Inhalt einer referenzierten .jar Allgemeine Java-Themen 5
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
nutellastulle Zugriff, Übergabe, Bearbeitung und Ausgabe von Jlist Allgemeine Java-Themen 6
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
J XML Element Zugriff Allgemeine Java-Themen 4
M Klassen Zugriff auf getMethode ohne Klasse zu erzeugen Allgemeine Java-Themen 6
A Input/Output Applet-Zugriff auf PHP-Schnittstelle (externer Server) Allgemeine Java-Themen 22
H Vererbung Abgeleitete Klassen und Zugriff Allgemeine Java-Themen 2
C Probleme mit dem Zugriff auf private Methode per reflection Allgemeine Java-Themen 2
J Zugriff auf Poker-Client Fenster Allgemeine Java-Themen 14
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
S Zugriff auf innere Klasse Allgemeine Java-Themen 3
D Kein Zugriff auf WebService ausser localhost Allgemeine Java-Themen 4
Sonecc Zugriff auf Class File einer anderen Jar während der Laufzeit Allgemeine Java-Themen 2
J Zugriff auf Dateien auf einem shared Folder? Allgemeine Java-Themen 3
H Zugriff auf VBA in Java Allgemeine Java-Themen 2
Haave Audio Device Unavailable: Kein gleichzeitiger Zugriff auf Soundsystem möglich Allgemeine Java-Themen 7
G Letzter Zugriff auf Datei Allgemeine Java-Themen 5
O Zugriff auf Serielle Schnittstelle - Keine Ports gefunden. Allgemeine Java-Themen 8
C Webstart: Zugriff auf lokale Dateien? Allgemeine Java-Themen 2
X Zugriff auf ComboBoxen in Hauptklasse von zweiter Klasse aus Allgemeine Java-Themen 8
J Zugriff auf gemeinsame Funktionen Allgemeine Java-Themen 4
Airwolf89 Zugriff auf ArrayList<ArrayList> Allgemeine Java-Themen 3
Airwolf89 Zugriff auf Werte in ArrayList<ArrayList> Allgemeine Java-Themen 4
T Zugriff zwischen Klassen für repaint Allgemeine Java-Themen 7
N Zugriff auf eine Referenzvar. Allgemeine Java-Themen 3
S Zugriff auf Klasse Allgemeine Java-Themen 4
Meldanor Mehrdimensionale Arrays : Zugriff auf n-tes Array Allgemeine Java-Themen 5
E JNA:Zugriff auf Common-Block von Fortran bzw. Struct in C Allgemeine Java-Themen 2
T Zugriff auf Singleton verkürzen - Namespaces?? Allgemeine Java-Themen 20
L Zugriff auf ein Objekt mit mehreren Threads Allgemeine Java-Themen 11
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
S Zugriff auf einzelne Bildpunkte Allgemeine Java-Themen 3
D Referenzen weiterreichen vs. statischer Zugriff Allgemeine Java-Themen 3
V Zugriff auf Default-Package? Allgemeine Java-Themen 6
P RegeEx-Problem: Zugriff auf group Allgemeine Java-Themen 2
M Zugriff auf Parallel-Schnittstelle Allgemeine Java-Themen 2
B Zugriff mit einem Applet auf den Datenträger Allgemeine Java-Themen 11
S Innere Klasse: Zugriff auf äußere Variable Allgemeine Java-Themen 5
I Zugriff auf Daten Allgemeine Java-Themen 5
T Zugriff per Reflection o.ä. möglich? Allgemeine Java-Themen 18
D Zugriff auf Windows Dienste Allgemeine Java-Themen 7
G Zugriff auf Memberclasses einer geladenen Class-Datei Allgemeine Java-Themen 2
I Gleichzeitiger zugriff auf ein Long über Threads Allgemeine Java-Themen 2
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
J Kein Zugriff auf Klassen im Default Package Allgemeine Java-Themen 8
M Paralleler Zugriff auf statische Methode Allgemeine Java-Themen 5
S Zugriff auf unterschiedliche JREs Allgemeine Java-Themen 7
M "Unzulässiger Zugriff auf einen Speicherbereich" Allgemeine Java-Themen 7
A Zugriff auf Parallelport nur über Eclipse nicht über .jar ! Allgemeine Java-Themen 12
G Zugriff auf ein sama share Allgemeine Java-Themen 8
J Java zugriff auf Exchange Server Allgemeine Java-Themen 10
D eclipse: Zugriff auf Ordner per code Allgemeine Java-Themen 4
O Konkurrierender Zugriff auf Log-Datei mit Log4J Allgemeine Java-Themen 11
Caracasa [Threads] Gleichzeitiger Zugriff auf eine LinkedList Allgemeine Java-Themen 9
L Zugriff auf Objekt das sich in einer Liste befindet Allgemeine Java-Themen 2
J Zugriff auf den Namen einer Variablen Allgemeine Java-Themen 7
J Zugriff auf Map in anderer Klasse Allgemeine Java-Themen 2
J Endlosschleife durch wechselseitigen Zugriff zweier Klassen? Allgemeine Java-Themen 2
F Zugriff auf lokalen Rechner wer weiss Rat ? Allgemeine Java-Themen 16
G Zugriff auf Dateien in jar-Datei Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben