.txt读写器显示错误的大小(以txt字节为单位)



我想用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个问题

  1. 完成后文件大小不正确的问题是由缓冲文件内容引起的,默认情况下,它会缓冲一些数据以防止对硬盘的短写入,从而降低性能。请在关闭文件后检查文件的大小,以便使用.length()调用查看正确的大小。

  2. 你可以使用

    PrintWriter outStream = new PrintWriter(new FileWriter("des.txt")); 
    

    因为FileWriter在其构造函数处接受String参数。

  3. 建议关闭文件处理程序/流,因为它们在使用完时不会自动关闭,因为垃圾收集器不会一直运行,而是只在需要的时候运行,这可能会导致无法删除的文件出现问题,因为它们仍在由无法访问的流使用,但仍加载在内存中,这也可能会带来一些问题,因为有些流使用缓冲区延迟写入,如果它们没有关闭,就会导致将自己视为第一个问题的问题。

相关内容

  • 没有找到相关文章

最新更新