Я читаю файл .dat с использованием файлового соединителя. Я передаю этот поток в метод Java, который потребляет поток, разделенный с помощью данного разделителя и записывает его в TMP Dir. < /P>
< /code>
java class: < /p>
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.json.JSONObject;
public class PDFChunker {
static String delimiter = "\n";
public static String splitAndChunkToFile(InputStream in ) throws IOException { return PDFChunker.splitAndChunkToFile( in , "/Users/Work/studio/dat-to-pdf/src/main/resources/tmp/"); }
public static String splitAndChunkToFile(InputStream in , String path) throws IOException {
int chunks = 0;
long totalSize = 0;
String uuid = UUID.randomUUID().toString();
List < JSONObject > chunkList = new ArrayList < JSONObject > ();
try (BufferedReader reader = new BufferedReader(new InputStreamReader( in , StandardCharsets.UTF_8))) {
String line;
StringBuilder currentChunk = new StringBuilder();
while ((line = reader.readLine()) != null) {
// Special handling for newline delimiters
boolean isDelimiter;
if (delimiter.equals("\n") || delimiter.equals("\r\n") || delimiter.equals("\r") || delimiter.equals(System.lineSeparator()) || delimiter.equals("NEWLINE")) {
// For newline delimiters, each line is a separate chunk
isDelimiter = true;
} else {
// Check if this line contains the delimiter
isDelimiter = line.trim().equals(delimiter);
}
if (isDelimiter && !delimiter.matches("\\r?\\n") && !delimiter.equals("NEWLINE") && !delimiter.equals(System.lineSeparator())) {
// Write the current chunk if it has content
if (currentChunk.length() > 0) {
writeChunkToFile(currentChunk.toString(), uuid, ++chunks, path, chunkList);
totalSize += currentChunk.toString().getBytes(StandardCharsets.UTF_8).length;
currentChunk.setLength(0); // Reset for next chunk
}
} else {
// For newline delimiters, each line becomes a separate chunk
if (delimiter.equals("\n") || delimiter.equals("\r\n") || delimiter.equals("\r") || delimiter.equals(System.lineSeparator()) || delimiter.equals("NEWLINE")) {
// Write each line as a separate chunk
if (line.trim().length() > 0) { // Skip empty lines
writeChunkToFile(line, uuid, ++chunks, path, chunkList);
totalSize += line.getBytes(StandardCharsets.UTF_8).length;
}
} else {
// Add line to current chunk for other delimiters
if (currentChunk.length() > 0) {
currentChunk.append(System.lineSeparator());
}
currentChunk.append(line);
}
}
}
// Write the last chunk if it has content
if (currentChunk.length() > 0) {
writeChunkToFile(currentChunk.toString(), uuid, ++chunks, path, chunkList);
totalSize += currentChunk.toString().getBytes(StandardCharsets.UTF_8).length;
}
}
JSONObject chunkResult = new JSONObject();
chunkResult.put("uuid", uuid);
chunkResult.put("chunks", chunks);
chunkResult.put("delimiter", delimiter);
chunkResult.put("size", totalSize);
chunkResult.put("chunkList", chunkList);
return chunkResult.toString();
private static void writeChunkToFile(String content, String uuid, int chunkNumber, String path, List < JSONObject > chunkList) throws IOException { File chunkFile = new File(path, "chunk_" + uuid + "_" + String.format("%05d", chunkNumber) + ".pdf"); chunkFile.getParentFile().mkdirs(); System.out.println("Writing PDF chunk to disk: " + chunkFile.getPath());
JSONObject fileObject = new JSONObject();
fileObject.put("path", chunkFile.getPath());
fileObject.put("fileName", chunkFile.getName());
fileObject.put("contentLength", content.length());
chunkList.add(fileObject);
try (PrintWriter writer = new PrintWriter(
new OutputStreamWriter(new FileOutputStream(chunkFile), StandardCharsets.UTF_8))) {
writer.print(content);
}
}
< /code>
Он обрабатывает поток и записывает контент в TMP Dir, как и ожидалось. Но в конце он брошен в конце. < /P>
org.mule.runtime.core.privileged.exception.DefaultExceptionListener:
********************************************************************************
Message : Invocation of static Method 'splitAndChunkToFile(java.io.InputStream)' from Class 'com.test.pdf.PDFChunker' with arguments [org.mule.extension.file.internal.FileInputStream arg0] resulted in an error.
Expected arguments are [java.io.InputStream in]
Element : dat-to-pdfFlow/processors/1 @ dat-to-pdf:dat-to-pdf.xml:40 (Invoke static)
Element DSL :
Error type : JAVA:INVOCATION
FlowStack : at dat-to-pdfFlow(dat-to-pdfFlow/processors/1 @ dat-to-pdf:dat-to-pdf.xml:40 (Invoke static))
Payload : org.mule.extension.file.internal.FileInputStream@249fd4c
--------------------------------------------------------------------------------
Root Exception stack trace:
java.nio.channels.ClosedChannelException
at java.base/sun.nio.ch.FileChannelImpl.ensureOpen(FileChannelImpl.java:159)
at java.base/sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:218)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:107)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:101)
at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:282)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:343)
at org.mule.extension.file.common.api.util.LazyInputStreamProxy.read(LazyInputStreamProxy.java:42)
at org.apache.commons.io.input.ProxyInputStream.read(ProxyInputStream.java:102)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:281)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:189)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:177)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:162)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:329)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:396)
at com.test.pdf.PDFChunker.splitAndChunkToFile(PDFChunker.java:37)
at com.test.pdf.PDFChunker.splitAndChunkToFile(PDFChunker.java:22)
< /code>
Как решить это исключение?
Спасибо за время и усилия! < /p>
Подробнее здесь: https://stackoverflow.com/questions/797 ... -connector
Мул вызывает исключение статических бросков при чтении потока из разъема файла ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Мул вызывает исключение статических бросков при чтении потока из разъема файла
Anonymous » » в форуме JAVA - 0 Ответы
- 1 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ошибка чтения входного потока при чтении потока WinSCP Session.GetFile из другого потока
Anonymous » » в форуме C# - 0 Ответы
- 68 Просмотры
-
Последнее сообщение Anonymous
-