4 votes

InvalidPathException pour un nom de fichier chinois

J'essaie de copier un fichier sur une machine ubuntu en utilisant l'instruction java

Files.copy(new File("/tmp/source/测试.xlsx").toPath(), new File("/tmp/dest/测试.xlsx").toPath(), StandardCopyOption.REPLACE_EXISTING);

Mais j'obtiens l'erreur suivante

java.nio.file.InvalidPathException : Entrée malformée ou entrée contenant des des caractères non applicables : /tmp/source/测试.xlsx à sun.nio.fs.UnixPath.encode(UnixPath.java:147) ~[na:1.8.0_91] at sun.nio.fs.UnixPath.(UnixPath.java:71) ~[na:1.8.0_91] at sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:281) ~[na:1.8.0_91] at java.io.File.toPath(File.java:2234) ~[na:1.8.0_91] at java.io.File.toPath(File.java:2234) ~[na:1.8.0_91]

Cela fonctionne parfaitement lorsque je l'exécute sur mon Eclipse. De plus, le code fonctionne correctement avec tous les caractères anglais.

5voto

Mad Piranha Points 389

Il peut s'agir d'un Bug JDK

Définir les propriétés suivantes du système sun.jnu.encoding=UTF-8 et file.encoding=UTF-8 .

  • Vérifier este pour ajouter les propriétés du système dans le plugin maven de tomcat.
  • Utiliser le -D si vous exécutez un java en ligne de commande. ( -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8 )

3voto

SubOptimal Points 15690

Je pense que c'est lié aux paramètres linguistiques de la machine sur laquelle vous voulez exécuter l'application.

Prenez l'extrait suivant

public class Main {
    public static void main(String[] args) throws IOException {
        Path source = Paths.get("/tmp/source/测试.xlsx");
        Path destination = Paths.get("/tmp/dest/测试.xlsx");
        Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING);
    }
}

compiler

javac -encoding UTF8 Main.java

exécuter avec la locale UTF8

LANG=en_US.utf8 java sub.optimal.playground.Main

Le fichier de destination sera créé (en supposant que le répertoire existe et que vous disposez des autorisations nécessaires).

exécuter avec la locale C

LANG=C java sub.optimal.playground.Main

sortie

java.nio.file.InvalidPathException: Malformed input or input contains
    unmappable characters: /tmp/source/??.xlsx

Vérifiez si la session dans laquelle vous voulez exécuter l'application utilise une locale qui supporte UTF8 (simple run locale ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X