Aprire file con caratteri speciali

di il
7 risposte

Aprire file con caratteri speciali

Ciao ragazzi! Sto avendo un problema con i file in java!

praticamente se volessi creare un oggetto di tipo File in questo modo:

File f= new FIle ("C:/ziò.txt") // notate la o accentata.
Mi vien fuori l'eccezione FileNotFound.... Come posso fare per ovviare a questo problema? Il file esiste.

Ho letto in giro che con le NIO le cose vanno meglio, ma dovrei usare versioni di java aggiornate...

qualche idea? grazie!

7 Risposte

  • Re: Aprire file con caratteri speciali

    Devi usare un'escaping UTF8 del carattere strano

    oppure

    MOOOOOOOOLTO MEGLIO

    EVITARE FILE CON NOMI STRAMPALATI



    RInomina il file!
  • Re: Aprire file con caratteri speciali

    Io penso che il problema possa essere di sicurezza, non è detto che tu abbia le autorizzazioni per operare nella root
  • Re: Aprire file con caratteri speciali

    Grazie per le risposte ragazzi, il problema è questo:

    mettiamo caso un giorno io debba avere a che fare con altri file dai nomi con caratteri strani, magari relativi ad un contesto diverso dal mio programma, e che quindi devono mantenere i loro nomi così come sono... come faccio io?

    Per la sicurezza posso garantirvi che sono amministratore al 100%, no antivirus, no firewall, nulla di nulla...


    Devo arrendermi? :S
  • Re: Aprire file con caratteri speciali

    La questione e' comunque strana!

    E naturalmente, e' complicata!

    1) se il nome del file lo hai ottenuto da codice, questo problema NON SI PUO' verificare
    2) se lo hai scritto in un file di configurazione, qui' il problema e' legato all'encoding usato dal file editor e da Java.

    Java usa UTF8 per tutti i file.
    Ovviamente il file da cui stai leggendo, deve avere lo stesso encoding.
    Se ne ha uno diverso (Windows 1252), e' neccessario AVVERTIRE java di questo fatto

    Ad esempio, i file XML hanno in testa l'encoding.

    ATTENZIONE: questo encoding e' correttamente gestito dagli editor XML, NON E' DETTO che notepad++, o altri editor lo gestiscano correttamente!

    3) Se arriva da linea di comando, valgono le considerazioni di cui sopra:

    devi scoprire se Java riceve il parametro in modo corretto oppure snbagliato, nel qual caso e' ancora una questione di encoding.

    (A naso, pero', qui' non ci dovrebbero essere problemi, perche' e' tutto sotto il controllo di Java)


    NON FUNZIONA leggere una righa da command line e stamparla per vedere se Java l'ha letta correttamente!!!


    Quella di non usare nomi di file strampalati (con spazi, accentate, segni di punteggiatura, ...) e' una di quelle regole non scritte che conviene sempre seguire.
  • Re: Aprire file con caratteri speciali

    Non è detto che essere amministratore ti consenta di scrivere file nella cartella principale. Alcuni sistemi recenti non lo consentono, specialmente se è attivo UAC.

    Fai le tue prove gestendo i file di cui parli in cartelle su cui sei sicuramente autorizzato, ovvero nella cartella Utenti\...
  • Re: Aprire file con caratteri speciali

    @migliorabile, grazie per le info , il filepath non è ottenuto da codice, lo scrivo io, e ho notato che non lo trova proprio perchè nel mio filepath c'è quella o accentata che diventa magicamente un '?'.
    come posso andare a lavorare sull'encoding?

    @oregon UAC disabilitato permanentemente, diritti amministrativi concessi a tutti gli utenti, ci smanettai tempo fa ma fortunatamente ora ho pieni privilegi (Windows 8 e 8.1).


    Grazie ancora per l'aiuto
  • Re: Aprire file con caratteri speciali

    Francesco93 ha scritto:


    ho notato che non lo trova proprio perchè nel mio filepath c'è quella o accentata che diventa magicamente un '?'.
    Se il testo con lettere speciali/particolari lo scrivi in una stringa literal nel sorgente, allora bisogna anche valutare le questioni sul charset del sorgente!

    a) Deve essere scelto un charset in grado di rappresentare i caratteri speciali come la 'ò' (es. UTF-8 è ok e anche es. ISO-8859-1 è ok perlomeno per tutte le principali lettere accentate).
    b) Il IDE/editor deve salvare il sorgente .java usando questo charset scelto e deve codificare correttamente i caratteri in byte. Es. per UTF-8 il IDE/editor deve scrivere 2 byte 0xC3 0xB2 per la "ò".
    c) Il compilatore Java deve essere invocato specificando il charset scelto, se è diverso da quello di default della piattaforma.

    Se usi un IDE (es. Eclipse), molto di questi punti è già automatico/implicito e generalmente corretto. Se usi un qualunque "comune" editor e/o compili "a mano" con i tools del JDK questo invece è tutto da verificare/impostare.

    Se è tutto corretto e nel byte-code Java la stringa contiene la giusta codifica Unicode per la "ò", fin qui è tutto corretto e da questo lato non c'è nulla di sbagliato.

    Resta solo il fatto di come una stringa Unicode venga poi "traslata" sul file-system (che potrebbe usare un charset specifico o essere meno "ampio" rispetto al Unicode). Questo è un altro discorso ma perlomeno con i file-system moderni (es. NTFS) non dovrebbero esserci problemi.
Devi accedere o registrarti per scrivere nel forum
7 risposte