У меня есть 900 файлов в папке, которые находятся в формате .pdf. Я должен конвертировать. PDF в CSV один за другим и сохранить эти CSV в другой папке. - PullRequest
0 голосов
/ 24 июня 2019

здесь я делаю для одного файла и храню в другой папке.как это сделать для нескольких файлов?

try 
{ 
     Document document = new Document();
     document.open();
     FileOutputStream fos=new FileOutputStream("C:\\Users\\user\\Desktop\\pdf\\MyCSVFile.csv");
     StringBuilder parsedText=new StringBuilder();
     PdfReader reader1 = new PdfReader("C:\\Users\\user\\Desktop\\pdf\\NL-26.pdf");
     int n = reader1.getNumberOfPages();
     for (int i = 0; i <n ; i++) 
     {
        parsedText.append(parsedText+PdfTextExtractor.getTextFromPage(reader1, i+1).trim()+"\n") ;
     }
     StringReader stReader = new StringReader(parsedText.toString());
     int t;
     while((t=stReader.read())>0)
         fos.write(t);
         document.close();

Ответы [ 3 ]

1 голос
/ 24 июня 2019

Вы можете получить все файлы в данном каталоге, используя this :

final File folder = new File("C:\\Users\\user\\Desktop\\pdf");
final File[] listOfFiles = folder.listFiles();

for (int i = 0; i < listOfFiles.length; i++) {
    final File file = listOfFiles[i];
    if (file.isFile() && file.getAbsolutePath().endsWith(".pdf")) {
        parsePdf("C:\\Users\\user\\Desktop\\pdf\\MyCSVFile"+i+".csv", file.getAbsolutePath());
    }
}

Если вы реорганизуете свою бизнес-логику в отдельный метод, вы можете использовать ее из if.

private static void parsePdf(final String fileToWrite, final String fileToRead) throws IOException {
    try (FileOutputStream fos = new FileOutputStream(fileToWrite)) {
        final StringBuilder parsedText = new StringBuilder();
        final PdfReader reader1 = new PdfReader(fileToRead);
        int n = reader1.getNumberOfPages();
        for (int i = 0; i < n; i++) {
            parsedText.append(parsedText + PdfTextExtractor.getTextFromPage(reader1, i + 1).trim() + "\n");
        }
        final StringReader stReader = new StringReader(parsedText.toString());
        int t;
        while ((t = stReader.read()) > 0)
            fos.write(t);
    }
}
0 голосов
/ 24 июня 2019

Вы также можете использовать библиотеку java.nio, начиная с Java 7:

try(DirectoryStream<Path> stream = Files.newDirectoryStream(Path.of("C:\\Users\\user\\Desktop\\pdf\\"), "*.pdf")) {
    stream.forEach(path -> {
        // process the current PDF file (path.toFile to access java.io.File)
    });
} catch (IOException ex) {
    // fail !
}
0 голосов
/ 24 июня 2019

Можно сделать что-то вроде этого:

public static void convertAllCSV(String directory)
{
    try 
    {
        ArrayList<String> files = findFiles(directory); //Returns list of all files in folder with .pdf extension

        for (String s : files)
        {
            convertSingleCSV(s, directory); //Your current code placed into a method
        }
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }   
}

Метод findFiles выглядит следующим образом:

public static ArrayList<String> findFiles(String directory) throws IOException
{
    ArrayList<String> fileList = new ArrayList<String>();
    File dir = new File(directory);

    String ext = ".pdf";
    String[] files = dir.list();
    for (String file : files)
    {
        //If the file ends with .pdf
        if(file.endsWith(ext))
        {
            fileList.add(file);
        }
    }
    return fileList;
}

В основном нужно добавить 2 шага. Вам нужно передать имя каталога и найти все файлы в каталоге с расширением .pdf, а затем использовать его для вызова исходного метода по одному через цикл.

convertSingleCSV - ваш код, помещенный в метод, затем использует имя файла и каталог для вывода нового файла. Поэтому вместо жесткого кодирования имени FileOutputStream просто преобразуйте его, выполнив что-то вроде этого:

String fileNameNoExtension = fileName.substring(0, fileName.lastIndexOf('.'));  //Cuts off the file extension to append csv instead of pdf
FileOutputStream fos = new FileOutputStream(directory + "\\" + fileNameNoExtension + ".csv")

Преимущество этого способа заключается в том, что вы сохраняете исходные имена файлов, а просто создаете новый файл с расширением .csv, и он будет пытаться конвертировать только файлы .pdf, и вам не придется беспокоиться о убедитесь, что другие файлы не находятся в переданном каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...