标签: java-io

Java ImageIO.write返回false

我想保存一个BufferedImage(名为"result"):

boolean bres = ImageIO.write(result, ".png", new File(saveP)); 
Run Code Online (Sandbox Code Playgroud)

但是布雷斯总是空的.

这个

ImageIO.getWriterFormatNames()
Run Code Online (Sandbox Code Playgroud)

返回:

jpg BMP bmp JPG jpeg wbmp png JPEG PNG WBMP GIF gif
Run Code Online (Sandbox Code Playgroud)

我应该能够保存为png.

并且BufferedImage的类型是"2"

BufferedImage@137695c: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 720 height = 576 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0
Run Code Online (Sandbox Code Playgroud)

类型2是"ARGB".

为什么我无法保存BufferedImage?

编辑:saveP ="ex000567.png"

java java-io javax.imageio

3
推荐指数
2
解决办法
1662
查看次数

将字节数组写入 UTF8 编码文件

给定 UTF-8 编码的字节数组(作为String 的 Base64 解码的结果)-将其写入 UTF-8 编码的文件的正确方法是什么?

下面的源代码(逐字节写入数组)正确吗?

OutputStreamWriter osw = new OutputStreamWriter(
    new FileOutputStream(tmpFile), Charset.forName("UTF-8"));
for (byte b: buffer)
    osw.write(b);
osw.close();
Run Code Online (Sandbox Code Playgroud)

java utf-8 java-io

3
推荐指数
1
解决办法
1万
查看次数

使用Java读取文件给出起始行和结束行号

我是Java编程的新手,我无法在任何地方找到问题的答案.

如何读取文件的几行并将其存储在一个String(或一个字符串列表)中.

例如,从1000行的文件中,我只需要读取从第200行到第400行的200行.

我遇到FileInputStream 它使用它我们可以定义起始位置,但我们无法定义结束位置.

java java-io

3
推荐指数
1
解决办法
933
查看次数

SequenceInputStream 中每个新流的新行

我有两个文件,test-1.text(内容是Data from test-1)和test-2.text(内容是Data from test-2)。
当我SequenceInputStream从两个流中读取时,输出要么是一条直线,要么是Data from test-1Data from test-2每个字符都在新行上。
如何开始在新行中打印第二个流中的内容?

public class SequenceIStream {

public static void main(String[] args) throws IOException {
    FileInputStream fi1 = new FileInputStream("resources/test-1.text");
    FileInputStream fi2 = new FileInputStream("resources/test-2.text");

    SequenceInputStream seq = new SequenceInputStream(fi1, fi2);

    int i= 0;

    while((i = seq.read())!=-1)
        System.out.print((char)i);
}
Run Code Online (Sandbox Code Playgroud)

}

输出是
Data from test-1Data from test-2

期望输出
Data from test-1
Data from test-2

java inputstream java-io

3
推荐指数
1
解决办法
737
查看次数

Apache POI - java.lang.NoClassDefFoundError:org/apache/commons/compress/utils/InputStreamStatistics

我正在尝试使用 Apache POI 读取 Word 文档 (.docx),但出现此错误...

线程“AWT-EventQueue-0”中的异常java.lang.NoClassDefFoundError:org/apache/commons/compress/utils/InputStreamStatistics at org.apache.poi.openxml4j.util.ZipArchiveThresholdInputStream.(ZipArchiveThresholdInputStream.java:63) at org. apache.poi.openxml4j.opc.internal.ZipHelper.openZipStream(ZipHelper.java:178) 在 org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:104) 在 org.apache.poi.openxml4j.opc .OPCPackage.open(OPCPackage.java:301)在gui.CryptoGUI.selectFileButtonActionPerformed(CryptoGUI.java:645)在gui.CryptoGUI.access$1100(CryptoGUI.java:27)在gui.CryptoGUI$11.actionPerformed(CryptoGUI.java: 321) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在 com.jtattoo.plaf.BaseButtonListener.mouseReleased(BaseButtonListener.java:65)在 java.awt.Component.processMouseEvent(Component.java:6535) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 在 java.awt.Component.processEvent(Component.java:6300) 在 java.awt。 Container.processEvent(Container.java:2236)在java.awt.Component.dispatchEventImpl(Component.java:4891)在java.awt.Container.dispatchEventImpl(Container.java:2294)在java.awt.Component.dispatchEvent(Component) .java:4713)在java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)在java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)在java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)在java.awt.Container.dispatchEventImpl(Container.java:2280)在java.awt.Window.dispatchEventImpl(Window.java:2750)在java.awt.Component.dispatchEvent(Component.java:4713)在java.awt。 EventQueue.dispatchEventImpl(EventQueue.java:758) 在 java.awt.EventQueue.access$500(EventQueue.java:97) 在 java.awt.EventQueue$3.run(EventQueue.java:709) 在 java.awt.EventQueue$3。在 java.security.AccessController.doPrivileged(本机方法)处运行(EventQueue.java:703) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain. java:86) 在 java.awt.EventQueue$4.run(EventQueue.java:731) 在 java.awt.EventQueue$4.run(EventQueue.java:729) 在 java.security.AccessController.doPrivileged(Native Method) 在 java .security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 在 java.awt。EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread) .java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

我的类路径中有以下库,

在此输入图像描述

这是我收到此错误的代码

private …
Run Code Online (Sandbox Code Playgroud)

java fileinputstream apache-poi java-io apache-poi-4

3
推荐指数
1
解决办法
1万
查看次数

Java InputStream:同时复制并计算哈希

这是我的两个代码片段:

public class Uploader {

  private static final String SHA_256 = "SHA-256";

  public String getFileSHA2Checksum(InputStream fis) throws IOException {
    try {
      MessageDigest md5Digest = MessageDigest.getInstance(SHA_256);
      return getFileChecksum(md5Digest, fis);
    } catch (NoSuchAlgorithmException e) {
      return "KO";
    }
  }

  public void transferTo(InputStream fis) throws IOException {
    FileUtils.copyInputStreamToFile(fis, file2);
  }
Run Code Online (Sandbox Code Playgroud)

我的代码使用此类:

是否有可能copyToFile同时calculateChecksum杠杆InputStream开放?

java java-io java-nio

3
推荐指数
1
解决办法
690
查看次数

可以用Java在多个字符集中编码文件吗?

我正在开发一个Java插件,它允许人们通过指定他们希望使用的字符集编码来写入和读取文件.但是,我对如何在单个文件中编码多个编码感到困惑.例如,假设A字符来自一个字符集而B字符来自另一个字符,是否可以将"AAAAABBBBBAAAAA"写入文件?

如果不可能,对于任何编程语言,或者特别是Java,这通常是正确的吗?如果有可能,我将如何继续读取(解码)文件?

我不想使用Charset的encode()和decode()方法,因为使用它们的测试失败了(一些字符集未被正确解码).我也不想出于各种原因使用第三方程序,所以这个问题的范围纯粹是标准的java包/代码.

非常感谢!
NS

java character-encoding java-io

2
推荐指数
1
解决办法
2654
查看次数

从TCP套接字读取的最有效方法

我有一个到服务器的TCP连接,由socket和流实现.在会话期间,服务器可以发送任意数量的消息 - 我必须阅读并处理它们.

我创建了一个线程,它以无限循环检查和读取数据:

in = socket.getInputStream();
ByteArrayOutputStream baos = null;
byte[] buf = new byte[4096];
while(!isInterrupted()) {
   baos = new ByteArrayOutputStream();
   for(int s; ( s = in.read(buf)) != -1; ) {
       baos.write(buf, 0, s);
       if(in.available() <= 0 ) {
           readChunk(baos.toByteArray());
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

但实际上,它效率不高 - 它使CPU处于高负荷状态,并且某些字节与前一个答案结合在一起.

解决这种情况最有效,最优雅的方法是什么?

java sockets java-io

2
推荐指数
1
解决办法
1813
查看次数

如果不存在,则创建文件和中间目录

当且仅当该文件不存在时,我想创建一个文件.

作为示例文件位置是指"C:\ user\Desktop\dir1\dir2\filename.txt"

if (!file.exists()) {
    try {
        file.createNewFile();
    } catch(IOException ioe) {                  
        ioe.printStackTrace();
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,上面的代码失败,因为dir1dir2不存在.

对于我的情况

  • 有时dir1和dir2可能存在,有时可能不存在.
  • 如果它们已经存在,我不想覆盖这些中间目录的内容,

如何干净地检查?

我想添加以下检查来处理这种情况:

if (!file.getParentFile().getParentFile().exists()) {
    file.getParentFile().getParentFile().mkdirs();
}
if (!file.getParentFile().exists()) {
    file.getParentFile().mkdirs();
}

if (!file.exists()) {                               
    try {
        file.createNewFile();
    } catch(IOException ioe) {
        ioe.printStackTrace();
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

或者有比这更明确的解决方案?

java file-io file java-ee java-io

2
推荐指数
1
解决办法
3126
查看次数

为什么java.net.SocketInputStream不存在?

我正在学习Java IO和Socket,并对socket.getInputStream()实际返回的内容感到困惑...

InputStream is = socket.getInputStream();
System.out.println(is.getClass().getName());
Run Code Online (Sandbox Code Playgroud)

由于InputStream是一个抽象类,因此socket.getInputStream()必须返回InputStream的实例化子类.我使用上面的代码获取实际的类名,但is.getClass().getName()原来是

java.net.SocketInputStream
Run Code Online (Sandbox Code Playgroud)

我试图在Eclipse中导入这个类,但没有发现这个类......

那究竟发生了什么?我是否误解了Java的某些部分?

java sockets java-io

2
推荐指数
1
解决办法
570
查看次数