Java 函数的作用是将文件从一个位置移动到另一个位置。如何避免呢?

Java 函数的作用是将文件从一个位置移动到另一个位置。如何避免呢?,java,file-io,Java,File Io,我有一种情况,我想把图像从一个目录复制到另一个目录。另外,我希望复制的图像以不同的名称存储。这就是我所做的: public static void main(String []args) { File source = new File("/home/src"); //rest of the code File[] listOfFiles = source.listFiles(); for (int i = 0; i < listOfFiles.leng

我有一种情况,我想把图像从一个目录复制到另一个目录。另外,我希望复制的图像以不同的名称存储。这就是我所做的:

public static void main(String []args)
{
    File source = new File("/home/src");

    //rest of the code

    File[] listOfFiles = source.listFiles();
    for (int i = 0; i < listOfFiles.length; i++) 
    {
         File f = new File("/home/src/"+listOfFiles[i].getName());   //I want to copy all the images from src to dest
         boolean b1 = f.renameTo(new File("/home/dest/"+i+".jpg"));   

         //rest of the code

    }
}
publicstaticvoidmain(字符串[]args)
{
文件源=新文件(“/home/src”);
//代码的其余部分
File[]listOfFiles=source.listFiles();
for(int i=0;i

现在,问题是,当我运行这段代码时,函数
renameTo()
正确地重命名了图像,但是它将图像从“src”目录移动到了“dest”目录。我不想那样。我希望“src”目录中的所有图像都完好无损。为了实现这一点,我目前正在做的是,我按原样使用这段代码,并在最后使用
FileUtils.copyDirectory()
将所有图像从“dest”复制回“src”。大量的谷歌搜索也无济于事。有没有办法直接实现这一目标?或者我需要继续我目前正在做的事情

您要做的是复制文件。但这不是重命名为的功能。而是移动或重命名它们。的javadoc解释了这一点

如果要使用classic Java复制文件,可以为源文件打开一个
FileInputStream
,为目标文件打开一个
FileOutputStream
,然后将字节从输入流复制到输出流

有关代码示例和其他复制方式,请阅读此问题的答案:


    • 您需要的是使用

      FileUtils.copyFile(File srcFile, File destFile);
      
      来自Apache的公共静态void main(字符串[]args) { 文件源=新文件(“/home/src”); //代码的其余部分 File[]listOfFiles=source.listFiles(); for(int i=0;i
      这就是您要求它执行的操作
      f.renameTo(新文件(“/home/dest/”+i+”.jpg”)
      @ScaryWombat:但是,还有其他方法吗?用java复制文件的4种方法:我不明白否决票!可能的重复意味着我必须继续我目前正在做的事情。首先重命名,然后将其复制回源目录,不是吗?不,不是。请重读我写的内容,并阅读我链接的问答。明白了!非常感谢。这是错误的
      renameTo
      不符合OP的要求。
      File f1=新文件(“/home/src/”+Listofiles[i].getName())是无用的,
      f1
      将等于
      listofiles[i]
      。是的,你是对的。谢谢现在好了吗?@4aRkKn1gh7:谢谢。这帮了大忙。这就是我要找的!非常感谢你。
          public static void main(String []args)
          {
              File source = new File("/home/src");
      
              //rest of the code
              File[] listOfFiles = source.listFiles();
              for (int i = 0; i < listOfFiles.length; i++) 
              {
                   File f1 = listOfFiles[i];   //I want to copy all the images from src to dest
                   File f2 = new File("/home/dst/"+listOfFiles[i].getName());
      
                   FileUtils.copyFile(f1, f2);
      
      
              // code for copying the file from src to dest here
      
                   boolean b1 = f2.renameTo(new File("/home/dst/"+i+".jpg"));   // this was corrected (to rename the destination file if you want)
                   //rest of the code
              }
          }