【问题标题】:Instead of renaming my file just duplicating而不是重命名我的文件只是复制
【发布时间】:2017-06-05 16:26:20
【问题描述】:

我有一个程序应该处理目录中的文件,如果文件大小超过 50 字节,请删除它。否则,如果文件大小小于 50 字节,程序应将 args[1] 文件重命名为 allFilesContent.txt(同一目录),并将所有文件写入该文件,以“n”(110 ASCII 码)分隔。但相反,程序只是创建另一个文件并写入第一个 args[1] 文件。有什么问题?

public class Solution
{
    public static void main(String [] args) throws IOException
    {
        File path = new File(args[0]);
        File resultFileAbsolutePath = new File(args[1]);
        ArrayList<File> allFiles = new ArrayList<>();
        boolean isRenamed = false;

        for(File file : path.listFiles())
        {
            if(file.length() > 50)
            {
                FileUtils.deleteFile(file);
            }

            else if(file.length() <= 50)
            {
                if(!isRenamed)
                {
                FileUtils.renameFile(resultFileAbsolutePath, new File(resultFileAbsolutePath.getParent()+"\\allFilesContent.txt"));
                isRenamed = true;
                }
                if(!file.getName().equals(resultFileAbsolutePath.getName()))
                {
                allFiles.add(file);
                }
            }
        }

        Collections.sort(allFiles, new Comparator<File>()
        {
            @Override
            public int compare(File o1, File o2)
            {
                return o1.getName().compareTo(o2.getName());
            }
        });

        FileOutputStream fileOutputStream = new FileOutputStream(resultFileAbsolutePath, true);

        for (File file : allFiles)
        {
            try(FileInputStream fileInputStream = new FileInputStream(file))
            {
                if(allFiles.indexOf(file) != 0) fileOutputStream.write(110);
                int data;
                while(fileInputStream.available() > 0)
                {
                    data = fileInputStream.read();
                    fileOutputStream.write(data);
                }
            }
        }

       fileOutputStream.close();
    }

    public static void deleteFile(File file)
    {
        if (!file.delete())
        {
            System.out.println("Can not delete file with name " + file.getName());
        }
    }
}

和 FileUtils 类

import java.io.File;

public class FileUtils
{

    public static void deleteFile(File file)
    {
        if (!file.delete())
        {
            System.out.println("Can not delete file with name " + file.getName());
        }
    }

    public static void renameFile(File source, File destination)
    {
        if (!source.renameTo(destination))
        {
            System.out.println("Can not rename file with name " + source.getName());
        }
    }
}

【问题讨论】:

    标签: java file io inputstream outputstream


    【解决方案1】:

    您有以下语句:“FileOutputStream fileOutputStream = new FileOutputStream(resultFileAbsolutePath, true);”

    用“假”代替“真”。它应该可以工作。

    【讨论】:

    • 不,只允许从多个文件写入输出流
    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2012-01-27
    • 2013-09-23
    • 1970-01-01
    • 2012-09-13
    • 2018-08-17
    • 1970-01-01
    相关资源
    最近更新 更多