проблема с доступом к юникоду - PullRequest
0 голосов
/ 29 ноября 2010

Я - новая пчела в мире Java. Мне нужна простая Java-программа, которая может получить доступ к одному PDF-файлу из одной папки и сохранить его в другой папке, сталкиваюсь с проблемой, как читать PDF-файл с неанглийским именемСкажите, если имя файла выглядит следующим образом, как я могу прочитать этот файл и сохранить его в другой папке с таким же именем, это очень важное требование для меня, пожалуйста, если кто-то знает об этом, пожалуйста, пришлите мне код, заранее спасибо

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

Во-первых, если единственной задачей является копирование файла в другую папку, не имеет значения, является ли файл PDF или что-то еще.Откройте файл, прочитайте его и запишите в другой файл.Если вы используете библиотеки Джакарты, задача очень проста:

OutputStream out = new FileOutputStream("yourfile.pdf");
IOUtils.copy(new FileInputStream("myfile.pdf"), out);
out.flush();
out.close();

Из-за того, что Java использует Unicode для внутреннего представления строки, здесь должно работать любое имя файла, включая имя файла, содержащее не английские символы.Но если вы заинтересованы в разборе содержимого, используйте одну из библиотек с открытым исходным кодом для анализа PDF (например, http://java -source.net / open-source / pdf-library ).

0 голосов
/ 29 ноября 2010

Откуда вы берете имя файла?Я попробовал следующий код, который копирует все файлы из одного каталога в другой и сохраняет китайские символы.

public class Main {

public static void main(String[] args) throws FileNotFoundException, IOException {
    String sourceDirectory = "temp/d1";
    String targetDirectory = "temp/d2";
    for (File fIn : new File(sourceDirectory).listFiles()) {
        File fOut = new File(targetDirectory, fIn.getName());
        copy(fIn, fOut);
    }
}

private static void copy(File fIn, File fOut) throws FileNotFoundException, IOException {
    InputStream in = new BufferedInputStream(new FileInputStream(fIn));
    OutputStream out = new BufferedOutputStream(new FileOutputStream(fOut));
    try {
        byte[] buf = new byte[1024];
        int read;

        while (-1 != (read = in.read(buf))) {
            out.write(buf, 0, read);
        }
    } finally {
        out.flush();
        out.close();
        in.close();
    }
}

}

Возможно, вы обрабатываете имя файла таким образомкитайские иероглифы сброшены?

...