|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Sep 2006
Messaggi: 9
|
Java: errore in scrittura su disco.
Ciao a tutti, ho un problema piuttosto curioso. Questo è il mio codice:
public static void main(String[] args) { String content = "contenuto del file"; String path = "C:\\prova.txt"; File file = new File(path); try { FileWriter writer = new FileWriter(file); writer.write(content); writer.close(); } catch (IOException ex) { ex.printStackTrace(); } } Presupponendo che esista il drive C: java.io.FileNotFoundException: C:\prova.txt (Impossibile trovare il percorso specificato) at java.io.FileOutputStream.open(Native Method) at java.io.FileOutputStream.<init>(FileOutputStream.java:179) at java.io.FileOutputStream.<init>(FileOutputStream.java:131) at java.io.FileWriter.<init>(FileWriter.java:73) at memory.Untitled1.main(Untitled1.java:21) Qualcuno ha qualche idea, o si è mai trovato ad affrontare un problema analogo? Grazie in anticipo dell'aiuto! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 3852
|
Il file prova.txt non esiste, prima di scriverci sopra penso tu debba crearlo..
__________________
Cerco fotocamera con buono zoom!! CLICCA! ° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) ° |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Quote:
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Sep 2006
Messaggi: 9
|
@ Andrea: ho provato a creare prima il file, utilizzando il metodo createNewFile, ma tutto quello che ottengo è un'altra IOException dello stesso tipo! Incredibile...
@ andbin: grazie per aver provato, prima di tutto; poi, ho pensato anch'io alla possibilità di permessi negati...però è il mio pc di casa, con il mio solo utente a livello amministratore, quindi ho permessi per scrivere dappertutto. Ah, il codice lo eseguo da JBuilder, forse che la jvm abbia qualche impostazione che vieta la scrittura?? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
createNewFile genera un'eccezione nel caso in cui si verifichi un errore durante il tentativo di creazione e dovrebbe produrre la stessa eccezione derivante da un tentativo di scrittura su un file che non può essere creato.
FileWriter tenta di creare il file nel caso in cui non ci sia. Se il problema fosse dovuto a dei permessi di scrittura mancanti, l'eccezione restituita non dovrebbe dire "The system cannot find the path specified" ma "Access denied". Il problema che riscontri è dovuto al fatto che la piattaforma non riconosce "c" come una radice del filesystem. Non vuol dire che "c" non ci sia: solo la piattaforma java non lo vede. Prova a stampare un elenco delle radici del filesystem e vedi un po' cosa "vede" la tua tazza di caffè. Codice:
import java.io.*;
public class Main {
public static void main(String[] args) {
File[] roots = File.listRoots();
for(File f : roots) {
System.out.println(f);
}
}
}
|
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Sep 2006
Messaggi: 9
|
@ PGI-Bis: il tuo ragionamento non fa una piega, effettivamente. L'eccezione genera il messaggio "Impossibile trovare il percorso specificato", il che dovrebbe essere inequivocabile...però eseguendo il tuo programmino, l'output prodotto è il seguente:
C:\ D:\ E:\ F:\ G:\ J:\ ...ma la cosa ancora più allucinante, è che provando ad eseguire queste sole linee... String path = "c:/prova"; File folder = new File(path); folder.mkdir(); la cartella "prova" viene correttamente creata in c:\!! Il mistero si infittisce... |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Sforiamo nella magia nera qui
Adesso dico una cosa che non sta nè in cielo nè in terra, ma visto che siamo alle strette... Nel codice che hai incollato inizialmente il percorso era: "C:\\prova.txt" con la C maiuscola. Il tuo test successivo dice che trova la cartella: "c:/prova" con la c minuscola. Se cambi il nome del file da: "C:\\prova.txt" a "c:\\prova.txt" che succede? Potrebbe essere un problema di codifica del codice sorgente? Una cosa bizzarrissima: la lettera "c" che appare come una c nel sorgente e appare come una c nell'output su console (prova con un System.out.println(file.getPath()) in realtà non è una C! Avrebbe un senso: se provate a scrivere un file usando una root inesistente capiterà proprio l'eccezione "Impossibile trovare il file specificato". Certo è una cosa inquietante |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Resta il fatto che da me il codice di cyberziz funziona benissimo.
@cyberziz: hai provato a scrivere in un altro path es. "C:\\TEMP\\prova.txt" (ovviamente la cartella ci deve essere)?? Quale versione di java usi (fai java -version)?? Hai provato a compilare/avviare il programmino al di fuori di JBuilder?
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Quote:
|
|
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Sep 2006
Messaggi: 9
|
...ora funziona anche a me!
![]() Dunque il mio problema partiva da tutt'altro punto: una servlet doveva salvare dei file uploadati con una richiesta http. Provando a creare un percorso attualmente inesistente, si generava l'eccezione. Così ho creato quel piccolo programma di cui sopra per capire il motivo dell'errore. Quando ho postato il codice, non ho badato se il percorso contenesse o meno cartelle, non lo consideravo un problema...in pratica non avevo provato mai con C:\file, finché non ho provato i vostri suggerimenti esattamente come li avete postati!! Avevo sempre una cartella di mezzo, che era inesistente: pensavo che FileOutputStream o FileWriter facessero tutti i controlli del caso, e creassero il percorso fino al file, se inesistente...invece l'operazione deve essere eseguita a mano con mkdirs()...ad ogni modo senza i vostri suggerimenti non ci avrei mai pensato! Quindi vi ringrazio e mi scuso per il tempo che vi ho fatto perdere... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:25.




















