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()
,在任何情况下,都不需要将整个文件读入内存。您知道classjava.nio.file.Files
及其copy()
方法吗?该类是在JDK 7中添加的。您知道类java.nio.file.Files
及其copy()
方法吗?该类是在JDK 7中添加的。