#java
#java
Вопрос:
Я запускаю программу, которая будет вызывать код, основанный на условии.
if (charCount >= 152) {
new InformixToPDF().createPdflandscape( DESTINATION
"\" new_file_name "_" df.format(new Date()) ".pdf",source);
}
//function to call for portrait conversion
else {
new InformixToPDF().createPdfportrait( DESTINATION
"\" new_file_name "_" df.format(new Date()) ".pdf",source);
}
Здесь приведен код, который вызывается, если выполнено условие else.
public void createPdfportrait(String dest,String source) throws DocumentException, IOException {
File myfile = new File(source);
Document document = new Document(PageSize.A4);
document.setMargins (20, 0, 50, 80);
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
br = new BufferedReader(new FileReader(source));
String line;
Paragraph p;
//PDF font configuration
Font normal = new Font(FontFamily.COURIER, 7);
Font bold = new Font(FontFamily.COURIER, 7, Font.BOLD);
//add page into PDF
boolean title = true;
while ((line = br.readLine()) != null) {
p = new Paragraph(line.length() == 0 ? " ": line, title ? bold : normal);
document.add(p);
}
document.close();
System.out.println("Informix4gl report file " source " has been converted to PDF");
Path sourcePath = Paths.get(source);
Path destinationPath = Paths.get(MOVE);
try {
Files.move(sourcePath, destinationPath,
StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
e.printStackTrace();
}
}
После преобразования был выполнен текущий файл. его необходимо переместить в другую папку, используя этот код, где «источник» — это текущий файл, а «ПЕРЕМЕСТИТЬ» — папка назначения.
Path sourcePath = Paths.get(source);
Path destinationPath = Paths.get(MOVE);
try {
Files.move(sourcePath, destinationPath,
StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
e.printStackTrace();
}
Коды выполняются, и pdf-файл создается успешно, но ошибка «java.nio.file.Исключение FileSystemException: O:xxyyzztest -> O:xxyyzzFOLDER C: Процесс не может получить доступ к файлу, поскольку он используется другим процессом.» появится.
Как мне исправить это и какие изменения я должен внести в код, чтобы избежать этой ошибки?
Я знаю, что этот вопрос задавали много раз, но ничто из этого не решило мою проблему. Однако, возможно, я что-то пропустил.
Комментарии:
1. Какая строка в коде вызывает исключение? вы можете отладить это.
2. Можете ли вы опубликовать полную обратную трассировку ? Это будет полезно.
3. Согласно тому, что вы опубликовали, сообщение об ошибке означает, что файл
O:xxyyzzFOLDER
открыт либо вашей Java-программой, либо какой-либо другой программой. Также `O:xxyyzztest — похоже, это путь к папке, а не к файлу. Вы пытаетесь переместить один файл или целую папку?4. Я пытаюсь переместить один файл. Извините, там было лишнее » «.
5. УБЕДИТЕЛЬНОЕ ПРЕДЛОЖЕНИЕ: добавьте
Thread.sleep(5000);
(или что-то подобное) послеdocument.close()
и посмотрите, поможет ли это. Возможно, iText не «закрывает» файл немедленно, поэтому ваш nio.move() выдает ошибку «используемый файл», если он попытается сразу после этого.