我是文件处理的新手。我尝试使用fileinputstream和文件通道读取文件。我无法在以下代码中找到该错误。它运行成功但文件尚未传输。使用零字节创建新文件。请查看代码并检查出现了什么问题
public class FileTest
{
public static void main(String[] args)
{
try {
File file = new File("sss.jpg");
FileChannel inChannel=new FileInputStream(file).getChannel();
//FileChannel inChannel = in.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(inChannel.read(buffer) > 0) {
FileChannel outChannel=new FileOutputStream("sss1.jpg",true).getChannel();
outChannel.write(buffer);
}
}
catch(IOException ex) {}
}
}
答案 0 :(得分:1)
我做这样的事情,
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class Test_Stuff {
public static void main(String[] args) throws FileNotFoundException, IOException {
String thisFile = "Test.java";
FileInputStream source = new FileInputStream(thisFile);
FileOutputStream destination = new FileOutputStream("Output.java");
FileChannel sourceFileChannel = source.getChannel();
FileChannel destinationFileChannel = destination.getChannel();
long size = sourceFileChannel.size();
sourceFileChannel.transferTo(0, size, destinationFileChannel);
}
}
答案 1 :(得分:1)
while(inChannel.read(buffer) > 0) {
FileChannel outChannel=new FileOutputStream("sss1.jpg",true).getChannel();
outChannel.write(buffer);
}
你忘了翻转并压缩缓冲区。
FileChannel outChannel = new FileOutputStream("sss1.jpg").getChannel();
while(inChannel.read(buffer) > 0) {
buffer.flip();
outChannel.write(buffer);
buffer.compact();
}
outChannel.close();
inChannel.close();
答案 2 :(得分:0)
您应该完全按照EJP's或Achintha Gunasekara's回答。你正在做很多不好的事情(例如,创建许多输出通道,而不是使用FileChannel::open
等)。但我认为基本问题不是致电flip
。来自javadoc:
翻转此缓冲区。限制设置为当前位置然后 位置设置为零。如果定义了标记,那么它就是 丢弃。在一系列通道读取或放置操作之后,调用 这种方法准备一系列的通道写入或相对获取 操作。例如:
buf.put(magic); // Prepend header in.read(buf); // Read data into rest of buffer buf.flip(); // Flip buffer out.write(buf); // Write header + data to channel
此方法通常与紧凑方法结合使用时 将数据从一个地方传输到另一个地方。