我想用Java制作一个程序,检查src是否存在(如果不抛出FileNoot)
并将src.txt的内容复制到des.txt
并在打开和关闭时打印两个文件的大小
输出为:
src.txt is in current directory
Before opening files:Size of src.txt:43 Bytes Size of des.txt:0 Bytes
After closing files:Size of src.txt:43 Bytes Size of des.txt:0 Bytes
src.txt将其内容写入des.txt后,des应为43字节
首先,我想问一下,我是否可以通过编写来省略文件声明
PrintWriter outStream = new PrintWriter(new FileWriter("des.txt"));
其次,我想问一下如何调整以下开关情况(系统独立换行)
为了在一次读取后添加一行换行符。
第三,我想问一下关闭文件时try/catch块的重要性
对于这种类型的问题非常抱歉,但在C中没有错误处理(我认为)close()肯定能正常工作
我对这些类型的问题感到抱歉,但我是java 的初学者
import java.io.*;
public class Main
{
public static void main() throws FileNotFoundException
{
File src = new File("src.txt");
if(src.exists())
System.out.println("src.txt is in current directory");
else throw new FileNotFoundException("src.txt is not in current directory");
BufferedReader inStream = null;
PrintWriter outStream = null;
try {
File des = new File("des.txt");
inStream = new BufferedReader(new FileReader(src));
outStream = new PrintWriter(new FileWriter(des));
System.out.print("Before opening files:Size of src.txt:"+src.length()+" Bytest");
System.out.println("Size of des.txt:"+des.length()+" Bytes");
int c;
while((c = inStream.read()) != -1) {
switch(c){
case ' ': outStream.write('@');
break;
case 'r':
case 'n':outStream.write('n');
outStream.write('n');
break;
default:outStream.write(c);
}
}
System.out.print("After closing files:Size of src.txt:"+src.length()+" Bytest");
System.out.println("Size of des.txt:"+des.length()+" Bytes");
} catch(IOException io) {
System.out.println("Read/Write Error:"+io.toString());
} finally {
try {
if (inStream != null) {
inStream.close();
}
if (outStream != null) {
outStream.close();
}
} catch (IOException io) {
System.out.println("Error while closing Files:"+io.toString());
}
}
}
}
您的主问题中有3个问题
-
完成后文件大小不正确的问题是由缓冲文件内容引起的,默认情况下,它会缓冲一些数据以防止对硬盘的短写入,从而降低性能。请在关闭文件后检查文件的大小,以便使用.length()调用查看正确的大小。
-
你可以使用
PrintWriter outStream = new PrintWriter(new FileWriter("des.txt"));
因为FileWriter在其构造函数处接受String参数。
-
建议关闭文件处理程序/流,因为它们在使用完时不会自动关闭,因为垃圾收集器不会一直运行,而是只在需要的时候运行,这可能会导致无法删除的文件出现问题,因为它们仍在由无法访问的流使用,但仍加载在内存中,这也可能会带来一些问题,因为有些流使用缓冲区延迟写入,如果它们没有关闭,就会导致将自己视为第一个问题的问题。