在这里,我正在处理一个文件并存储在另一个文件夹中。对于多个文件该怎么办?
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();
答案 0 :(得分:1)
您可以使用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);
}
}
答案 1 :(得分:0)
可以执行以下操作:
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
文件,而您不会必须担心确保其他文件不在传递的目录中。
答案 2 :(得分:0)
从Java 7开始,您还可以使用java.nio
库:
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 !
}