Java 将文件从源复制到目标时保留上次修改的日期时间

Java 将文件从源复制到目标时保留上次修改的日期时间,java,file,java-8,fileinputstream,fileoutputstream,Java,File,Java 8,Fileinputstream,Fileoutputstream,我正在尝试将文件从一个位置复制到另一个位置。从源文件复制到目标文件时,目标文件使用当前日期时间。如何使目标文件日期与源文件相同 FileInputStream source = new FileInputStream("D:\\test\\test.txt"); OutputStream target = new FileOutputStream("D:\\test.txt"); byte[] buffer = new byte[source.available()]; source.read(

我正在尝试将文件从一个位置复制到另一个位置。从源文件复制到目标文件时,目标文件使用当前日期时间。如何使目标文件日期与源文件相同

FileInputStream source = new FileInputStream("D:\\test\\test.txt");
OutputStream target = new FileOutputStream("D:\\test.txt");
byte[] buffer = new byte[source.available()];
source.read(buffer);
target.write(buffer);
source.close();
target.close();`

这是由
java.io.File
类提供的。您需要首先创建它的实例并将其传递给流:

File input = new File("D:\\test\\test.txt");
File output = new File("D:\\test.txt");
try( FileInputStream source = new FileInputStream(input);
     OutputStream target = new FileOutputStream(output)){
    byte[] buffer = new byte[source.available()];
    source.read(buffer);
    target.write(buffer);
}
long modified = input.lastModified();
output.setLastModified(modified);

顺便说一句:我假设您至少使用了Java7,所以我将您的代码更改为使用try-with-resources功能。强烈建议这样做,因为它还负责在引发异常时关闭资源。

这是由
java.io.File
类提供的。您需要首先创建它的实例并将其传递给流:

File input = new File("D:\\test\\test.txt");
File output = new File("D:\\test.txt");
try( FileInputStream source = new FileInputStream(input);
     OutputStream target = new FileOutputStream(output)){
    byte[] buffer = new byte[source.available()];
    source.read(buffer);
    target.write(buffer);
}
long modified = input.lastModified();
output.setLastModified(modified);

顺便说一句:我假设您至少使用了Java7,所以我将您的代码更改为使用try-with-resources功能。强烈建议这样做,因为它还负责在出现异常时关闭资源。

自JDK 7以来,以下代码将复制一个文件,并且复制的文件将具有与原始文件相同的属性,这意味着目标文件将与源文件具有相同的日期

FileInputStream source = new FileInputStream("D:\\test\\test.txt");
OutputStream target = new FileOutputStream("D:\\test.txt");
byte[] buffer = new byte[source.available()];
source.read(buffer);
target.write(buffer);
source.close();
target.close();`
java.nio.file.Path source=java.nio.file.Paths.get(“D:\\test\\test.txt”);
java.nio.file.Path target=java.nio.file.Path.get(“D:\\test.txt”);
试一试{
copy(源、目标、java.nio.file.StandardCopyOption.copy_属性);
}
捕获(java.io.iox异常){
x、 printStackTrace();
}

自JDK 7以来,以下代码将复制一个文件,复制的文件将具有与原始文件相同的属性,这意味着目标文件将与源文件具有相同的日期

FileInputStream source = new FileInputStream("D:\\test\\test.txt");
OutputStream target = new FileOutputStream("D:\\test.txt");
byte[] buffer = new byte[source.available()];
source.read(buffer);
target.write(buffer);
source.close();
target.close();`
java.nio.file.Path source=java.nio.file.Paths.get(“D:\\test\\test.txt”);
java.nio.file.Path target=java.nio.file.Path.get(“D:\\test.txt”);
试一试{
copy(源、目标、java.nio.file.StandardCopyOption.copy_属性);
}
捕获(java.io.iox异常){
x、 printStackTrace();
}

如果可能,只需使用路径API即可

例如,要在新文件中保留原始文件的所有属性,请使用:

StandardCopyOption.COPY\u属性
enum状态:

至少,如果需要,上次修改的时间会复制到目标文件中 源文件存储和目标文件存储都支持

如果只想复制上次修改的时间属性,这并不复杂,只需在复制后添加该设置,并删除
CopyOption
arg,例如:

Path originalFile = Paths.get("D:\\test.txt")
try {
   Path copiedFile = 
   Files.copy(Paths.get("D:\\test\\test.txt"), originalFile);   
   Files.setLastModifiedTime(copiedFile, 
          Files.getLastModifiedTime(originalFile));
}
catch (IOException e){
  // handle that
}
最后,请注意路径和文件是可互操作的:
Path.toFile()
返回相应的
文件
File.toPath()
返回相应的
路径


因此,即使您将
文件
s作为输入进行操作,实现仍然可以使用
路径
API,而不会破坏该路径

如果可能,只需使用路径API即可

例如,要在新文件中保留原始文件的所有属性,请使用:

StandardCopyOption.COPY\u属性
enum状态:

至少,如果需要,上次修改的时间会复制到目标文件中 源文件存储和目标文件存储都支持

如果只想复制上次修改的时间属性,这并不复杂,只需在复制后添加该设置,并删除
CopyOption
arg,例如:

Path originalFile = Paths.get("D:\\test.txt")
try {
   Path copiedFile = 
   Files.copy(Paths.get("D:\\test\\test.txt"), originalFile);   
   Files.setLastModifiedTime(copiedFile, 
          Files.getLastModifiedTime(originalFile));
}
catch (IOException e){
  // handle that
}
最后,请注意路径和文件是可互操作的:
Path.toFile()
返回相应的
文件
File.toPath()
返回相应的
路径


因此,即使您将
文件
s作为输入进行操作,实现仍然可以使用
路径
API,而不会破坏该路径

API是您的朋友:Javadoc中有一个特定的警告,警告您使用
available()
,并且在任何情况下都不需要将整个文件读入内存。API是您的朋友:Javadoc中有一个特定的警告,警告您使用
available()
,在任何情况下,都不需要将整个文件读入内存。您知道class
java.nio.file.Files
及其
copy()
方法吗?该类是在JDK 7中添加的。您知道类
java.nio.file.Files
及其
copy()
方法吗?该类是在JDK 7中添加的。