我想保存一个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"
给定 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编程的新手,我无法在任何地方找到问题的答案.
如何读取文件的几行并将其存储在一个String(或一个字符串列表)中.
例如,从1000行的文件中,我只需要读取从第200行到第400行的200行.
我遇到FileInputStream 它使用它我们可以定义起始位置,但我们无法定义结束位置.
我有两个文件,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
我正在尝试使用 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) 这是我的两个代码片段:
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插件,它允许人们通过指定他们希望使用的字符集编码来写入和读取文件.但是,我对如何在单个文件中编码多个编码感到困惑.例如,假设A字符来自一个字符集而B字符来自另一个字符,是否可以将"AAAAABBBBBAAAAA"写入文件?
如果不可能,对于任何编程语言,或者特别是Java,这通常是正确的吗?如果有可能,我将如何继续读取(解码)文件?
我不想使用Charset的encode()和decode()方法,因为使用它们的测试失败了(一些字符集未被正确解码).我也不想出于各种原因使用第三方程序,所以这个问题的范围纯粹是标准的java包/代码.
非常感谢!
NS
我有一个到服务器的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处于高负荷状态,并且某些字节与前一个答案结合在一起.
解决这种情况最有效,最优雅的方法是什么?
当且仅当该文件不存在时,我想创建一个文件.
作为示例文件位置是指"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)
不幸的是,上面的代码失败,因为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 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 ×10
java-io ×10
sockets ×2
apache-poi ×1
apache-poi-4 ×1
file ×1
file-io ×1
inputstream ×1
java-ee ×1
java-nio ×1
utf-8 ×1