Domanda

Sto creando un file in questo modo

try {
    File file = new File(workingDir, obj.getName() + ".xls");
    outputStream = new FileOutputStream(file);
} catch (FileNotFoundException ex) {
    ex.printStackTrace();
}

E sto arrivando

java.io.FileNotFoundException: ..\a\relative\path\obj_name.xls (The parameter is incorrect)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)

Che cos'è " il parametro non è corretto " significare? Il percorso che ho convalidato esiste; non dovrebbe semplicemente creare il nome del file? Questo è su un computer Windows. Il codice funziona senza questo errore su sistemi basati su unix.


Aggiorna

Verificato che esiste il file in cui il flusso di output sta tentando di scrivere. Inoltre verificato che il file sia scrivibile. Dopo molte discussioni, ho rimosso il percorso effettivo e ho appena passato il nome del file (non desiderato) e funziona. Quindi il problema ha qualcosa a che fare con il percorso. Devo sfuggire ai personaggi nel percorso?

È stato utile?

Soluzione

Sembra un bug segnalato su macchine Windows.

In situazioni normali, qualcosa come un percorso con due punti (:) in esso che non fa riferimento a una lettera di unità causerebbe questo messaggio.

Altri suggerimenti

Sembra essere un problema con il percorso che stai utilizzando. Prova a utilizzare file.getPath () prima di aprirlo per eseguire il debug di ciò che sta succedendo con il tuo percorso.

File file = new File(workingDir, obj.getName() + ".xls");
System.out.println("Path="+file.getPath());
outputStream = new FileOutputStream(file);

Se il tuo " workingDir " è un percorso relativo, quindi sei sicuro di essere nella directory corretta " corrente " quando hai spostato la tua app da unix a windows? Forse, dovresti controllare qual è la directory corrente dell'applicazione in esecuzione.

Forse l'applicazione non ha l'accesso corretto per scrivere sul file? È di sola lettura o altrimenti protetto?

FileOutputStream.open () è un metodo nativo, suppongo che qualsiasi tipo di messaggio di eccezione come " Il parametro non è corretto " proviene dal sistema operativo sottostante.

BTW: il costruttore File non chiama FileOutputStream.open () , quindi l'eccezione non proviene effettivamente dal codice che hai pubblicato qui?

Forse è a causa delle barre rovesciate nel percorso? Percorso troppo lungo? Nome file non valido per questo errore (caratteri speciali ...)?

Potrei sbagliarmi del tutto, ma vale la pena provare perché sembra un errore dipendente dal sistema operativo.

Assicurati che l'utente che esegue il processo JVM disponga delle autorizzazioni giuste per accedere a quel file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top