Мул вызывает исключение статических бросков при чтении потока из разъема файлаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Мул вызывает исключение статических бросков при чтении потока из разъема файла

Сообщение Anonymous »

Я читаю файл .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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Мул вызывает исключение статических бросков при чтении потока из разъема файла
    Anonymous » » в форуме JAVA
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Использование Naudios MediaFoundationEncoder с исключением бросков потока
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Ошибка чтения входного потока при чтении потока WinSCP Session.GetFile из другого потока
    Anonymous » » в форуме C#
    0 Ответы
    68 Просмотры
    Последнее сообщение Anonymous
  • Исключение бросается при подключении к базе данных MySQL с использованием разъема C ++ (v9.2) [Закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Мул, пружина, Mybatis - не смог получить базу данных от DataSource
    Anonymous » » в форуме JAVA
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»