以下两种缓冲方法之间有什么不同(如果有的话)?
Reader r1 = new BufferedReader(new InputStreamReader(in, "UTF-8"), bufferSize);
Reader r2 = new InputStreamReader(new BufferedInputStream(in, bufferSize), "UTF-8");
Run Code Online (Sandbox Code Playgroud) 我试图找到将InputStream传递给OutputStream的最佳方法.我没有选择使用任何其他库,如Apache IO.这是片段和输出.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.FileChannel;
public class Pipe {
public static void main(String[] args) throws Exception {
for(PipeTestCase testCase : testCases) {
System.out.println(testCase.getApproach());
InputStream is = new FileInputStream("D:\\in\\lft_.txt");
OutputStream os = new FileOutputStream("D:\\in\\out.txt");
long start = System.currentTimeMillis();
testCase.pipe(is, os);
long end = System.currentTimeMillis();
System.out.println("Execution Time = " + (end - start) + " millis");
System.out.println("============================================");
is.close();
os.close();
}
}
private static PipeTestCase[] testCases = {
new PipeTestCase("Fixed Buffer Read") {
@Override …Run Code Online (Sandbox Code Playgroud) 我需要通过Java添加文本到文本文件的开头.
例如,我有带有数据的test.txt文件:
Peter
John
Alice
Run Code Online (Sandbox Code Playgroud)
我需要添加(到文件顶部):
Jennifer
Run Code Online (Sandbox Code Playgroud)
它应该是:
Jennifer
Peter
John
Alice
Run Code Online (Sandbox Code Playgroud)
我有部分代码,但它将数据附加到文件末尾,我需要将文本添加到文件顶部:
public static void irasymas(String irasymai){
try {
File file = new File("src/lt/test.txt");
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(irasymai+ "\r\n");
bw.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个,但这只删除了文件中的所有数据而没有插入任何文本:
public static void main(String[] args) throws IOException {
BufferedReader reader = null;
BufferedWriter writer = null;
ArrayList list = new ArrayList();
try {
reader = new BufferedReader(new …Run Code Online (Sandbox Code Playgroud) 在围绕SO编写答案时,用户试图指出不java.io.File应该在新代码中使用,而是他认为应该使用新对象java.nio.Files; 他链接到这篇文章.
现在我已经用Java开发了好几年了,之前没有听过这个论点; 自从阅读他一直在寻找的帖子,并没有找到许多证实这一点的其他消息来源,而且就个人而言,我觉得文章中提出的许多观点都很薄弱,如果你知道如何阅读它们,那么文件类通常会告诉您具体问题.
当我不断开发新代码时,我的问题是:
构造函数中缓冲区大小的含义是什么?
BufferedReader(Reader in, int size)
Run Code Online (Sandbox Code Playgroud)
正如我写的程序:
import java.io.*;
class bufferedReaderEx{
public static void main(String args[]){
InputStreamReader isr = null;
BufferedReader br = null;
try{
isr = new InputStreamReader(System.in);
// System.out.println("Write data: ");
// int i = isr.read();
// System.out.println("Data read is: " + i);
//Thus the InputStreamReader is useful for reading the character from the stream
System.out.println("Enter the data to be read by the bufferedReader: ");
//here isr is containing the lnefeed already so this is needed to be flushed. …Run Code Online (Sandbox Code Playgroud) 我正在从文本文件中读取连续的字符行.文件中字符的编码可能不是单字节.
在某些时候,我想获得下一行开始的文件位置,这样我可以稍后重新打开文件并快速返回到该位置.
是否有一种简单的方法可以做到这两点,最好是使用标准的Java库?
如果没有,什么是合理的解决方法?
理想的解决方案是处理多种字符编码.这包括UTF-8,其中不同的字符可以用不同的字节数表示.理想的解决方案主要依赖于受信任且支持良好的库.最理想的是标准Java库.第二好的是Apache或Google库.解决方案必须是可扩展的.将整个文件读入内存不是一种解决方案.返回位置不应要求在线性时间内读取所有先前字符.
对于第一个要求,BufferedReader.readLine()是有吸引力的.但缓冲显然会干扰获得有意义的文件位置.
不太明显,InputStreamReader也可以提前读取,干扰获取文件位置.从InputStreamReader文档:
为了能够有效地将字节转换为字符,可以从基础流中提取比满足当前读取操作所需的更多字节.
该方法RandomAccessFile.readLine() 每个字符读取一个字节.
通过取字符的低八位的字节值并将字符的高八位设置为零,将每个字节转换为字符.因此,此方法不支持完整的Unicode字符集.
我正在寻找一种方法来获取给定目录中的所有目录名称,但不是文件.
例如,假设我有一个名为的文件夹Parent,在里面我有3个文件夹:Child1 Child2和Child3.
我想获取文件夹的名称,但不关心Child1,Child2等内的子文件夹的内容或名称.
有一个简单的方法吗?
我想使用Java将gif图像转换为jpeg.它适用于大多数图像,但我有一个简单的透明gif图像:
输入gif图像http://img292.imageshack.us/img292/2103/indexedtestal7.gif
[如果图像丢失:它是一个蓝色圆圈,周围有透明像素]
当我使用以下代码转换此图像时:
File file = new File("indexed_test.gif");
BufferedImage image = ImageIO.read(file);
File f = new File("indexed_test.jpg");
ImageIO.write(image, "jpg", f);
Run Code Online (Sandbox Code Playgroud)
此代码可以在不抛出异常的情况下工作,但会导致无效的jpeg图像:
[如果图像丢失:IE无法显示jpeg,Firefox会显示无效颜色的图像.]
我正在使用Java 1.5.
我还尝试使用gimp将示例gif转换为png并使用png作为Java代码的输入.结果是一样的.
这是JDK中的错误吗?如何在没有第三方库的情况下正确转换图像?
更新:
答案表明jpeg转换无法正确处理透明度(我仍然认为这是一个错误)并建议使用预定义颜色替换透明像素的解决方法.这两种建议的方法都非常复杂,所以我实现了一个更简单的方法(将作为答案发布).我接受了第一个已发布的答案(Markus).我不知道哪种实现更好.我选择了最简单的一个,但我发现它不起作用的gif.
java.io有许多不同的I/O流,(FileInputStream,FileOutputStream,FileReader,FileWriter,BufferedStreams ......等),我很困惑,在确定它们之间的差异.有哪些例子表明一种流类型优先于另一种流类型,它们之间的真正区别是什么?
我正在尝试解组我的xml文件:
public Object convertFromXMLToObject(String xmlfile) throws IOException {
FileInputStream is = null;
File file = new File(String.valueOf(this.getClass().getResource("xmlToParse/companies.xml")));
try {
is = new FileInputStream(file);
return getUnmarshaller().unmarshal(new StreamSource(is));
} finally {
if (is != null) {
is.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:java.io.FileNotFoundException:null(没有这样的文件或目录)
这是我的结构:
为什么我无法从资源文件夹中获取文件?谢谢.
更新.
重构后,
URL url = this.getClass().getResource("/ xmlToParse/companies.xml"); 文件文件=新文件(url.getPath());
我可以更清楚地看到错误:
java.io.FileNotFoundException:/content/ROOT.war/WEB-INF/classes/xmlToParse/companies.xml(没有这样的文件或目录)
它试图找到WEB-INF/classes /我在那里添加了文件夹,但仍然收到此错误:(