2017-10-18 14 views
1

Pourquoi cette différence?Pourquoi 'Files.exists' renvoie-t-il true, mais 'File.exists' renvoie false? il se produit uniquement lorsque le nom de fichier est en caractères multi-octets

Path docDir 

Paths.exists(docDir):true 
docDir.toPath().exists():false 

autres attribuent:

Files.isDirectory(docDir)=true 
Files.isExecutable(docDir)=true 
Files.isHidden(docDir)=false 
Files.isReadable(docDir)=true 
Files.isRegularFile(docDir)=false 
Files.isSymbolicLink(docDir)=false 
Files.isWritable(docDir)=true 
Files.notExists(docDir)=false 

Ce problème ne se produit pas dans les chaînes de caractères sur un octet.

version Linux est

Linux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)) 

cette application est le service, et je l'aide de la bibliothèque springBoot.

Il n'y a aucun problème à utiliser 'nio' pour la lecture/écriture, mais l'utilisation de 'io.File' donnera 'FileNotFoundException'.

Y at-il quelque chose que j'ai mal fait?

+1

Est-il un lien symbolique? Quelle version de Java utilisez-vous? Je n'arrive pas à trouver 'exists' dans' Paths' ou 'Path' (to' toPath') d'ailleurs – MadProgrammer

+0

FYI: 'java.io' ne gère pas les liens symboliques, alors que' java.nio' le fait (un meilleur travail) – MadProgrammer

+2

Alors, quel est le caractère réel qui a le problème? et aussi puisque vous utilisez un vieux linux, et que votre nom ressemble à du japonais, utilisez-vous quelque chose comme le code de caractère "euc-jp" ou "shift-jis"? et quel est le système de fichiers que vous utilisez? – ymonad

Répondre

0

Si vous voulez dire

String fileName = "テスト.txt"; 
    Path docDir = new File ("/tmp/" + fileName).toPath(); 
    System.out.println(Files.exists(docDir)); 
    System.out.println(docDir.toFile().exists()); 

fonctionne alors OK pour moi @ CentOS libèrent 6.8 (Final)

Bien que je ne me rappelle quelque chose comme ça dans un fichier zip

+0

C'est vrai, je suis désolé. Ce n'est pas 'toPath' mais 'toFile'. Cette cible est un répertoire de noms japonais et un fichier PDF. docDir.toFile(). exists(): false –

+0

l'a essayé comme/tmp/テ ス ト/テ ス ト .txt car cela fonctionne OK –