集册 Java实例教程 设置文件时间

设置文件时间

欢马劈雪     最近更新时间:2020-01-02 10:19:05

399
设置文件时间

/*-

 * Copyright (C) 2014 Erik Larsson

 *

 * This program is free software: you can redistribute it and/or modify

 * it under the terms of the GNU General Public License as published by

 * the Free Software Foundation, either version 3 of the License, or

 * (at your option) any later version.

 *

 * This program is distributed in the hope that it will be useful,

 * but WITHOUT ANY WARRANTY; without even the implied warranty of

 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

 * GNU General Public License for more details.

 *

 * You should have received a copy of the GNU General Public License

 * along with this program.  If not, see <http://www.gnu.org/licenses/>.

 *//* 来 自 n o w j a v a . c o m - 时  代  Java*/

//package com.nowjava;

import java.lang.reflect.Array;

import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.Date;


public class Main {

    public static void setFileTimes(String path, Date creationTime,

            Date lastAccessTime, Date lastModifiedTime)

            throws ClassNotFoundException, NoSuchMethodException,

            IllegalAccessException, IllegalArgumentException,

            InvocationTargetException, NoSuchFieldException {

        Class<?> pathClass = Class.forName("java.nio.file.Path");

        Class<?> fileSystemsClass = Class

                .forName("java.nio.file.FileSystems");/*nowjava - 时  代  Java 提 供*/

        Class<?> fileSystemClass = Class

                .forName("java.nio.file.FileSystem");

        Class<?> basicFileAttributeViewClass = Class

                .forName("java.nio.file.attribute.BasicFileAttributeView");

        Class<?> filesClass = Class.forName("java.nio.file.Files");

        Class<?> linkOptionClass = Class

                .forName("java.nio.file.LinkOption");

        Class<?> fileTimeClass = Class

                .forName("java.nio.file.attribute.FileTime");


        /* FileSystem defaultFileSystem = FileSystems.getDefault(); */

        Method fileSystemsGetDefaultMethod = fileSystemsClass

                .getMethod("getDefault");

        Object defaultFileSystemObject = fileSystemsGetDefaultMethod

                .invoke(null);


        /* Path p = defaultFileSystem.getPath(path); */

        Method fileSystemGetPathMethod = fileSystemClass.getMethod(

                "getPath", String.class, String[].class);

        Object pObject = fileSystemGetPathMethod.invoke(

                defaultFileSystemObject, path, new String[0]);


        /* BasicFileAttributeView attrView =

         *         Files.getFileAttributeView(p, BasicFileAttributeView.class,

         *         LinkOption.NOFOLLOW_LINKS); */

        Field noFollowLinksField = linkOptionClass

                .getField("NOFOLLOW_LINKS");

        Object noFollowLinksObject = noFollowLinksField.get(null);


        Object linkOptionsArray = Array.newInstance(linkOptionClass, 1);

        Array.set(linkOptionsArray, 0, noFollowLinksObject);


        Method getFileAttributeViewMethod = filesClass.getMethod(

                "getFileAttributeView", pathClass, Class.class,

                linkOptionsArray.getClass());

        Object attrViewObject = getFileAttributeViewMethod.invoke(null,

                pObject, basicFileAttributeViewClass, linkOptionsArray);


        /*

         * FileTime creationFileTime;

         * if(creationTime != null) {

         *     creationFileTime = FileTime.fromMillis(creationTime.getTime());

         * }

         * else {

         *     creationFileTime = null;

         * }

         */

        Object creationFileTimeObject;

        if (creationTime != null) {

            Method fileTimefromMillisMethod = fileTimeClass.getMethod(

                    "fromMillis", long.class);

            creationFileTimeObject = fileTimefromMillisMethod.invoke(null,

                    Long.valueOf(creationTime.getTime()));

        } else {

            creationFileTimeObject = null;

        }


        /*

         * FileTime lastAccessFileTime;

         * if(lastAccessTime != null) {

         *     lastAccessFileTime =

         *         FileTime.fromMillis(lastAccessTime.getTime());

         * }

         * else {

         *     lastAccessFileTime = null;

         * }

         */

        Object lastAccessFileTimeObject;

        if (lastAccessTime != null) {

            Method fileTimefromMillisMethod = fileTimeClass.getMethod(

                    "fromMillis", long.class);

            lastAccessFileTimeObject = fileTimefromMillisMethod.invoke(

                    null, Long.valueOf(lastAccessTime.getTime()));

        } else {

            lastAccessFileTimeObject = null;

        }


        /*

         * FileTime lastModifiedFileTime;

         * if(lastModifiedTime != null) {

         *     lastModifiedFileTime =

         *         FileTime.fromMillis(lastModifiedTime.getTime());

         * }

         * else {

         *     lastModifiedFileTime = null;

         * }

         */

        Object lastModifiedFileTimeObject;

        if (lastModifiedTime != null) {

            Method fileTimefromMillisMethod = fileTimeClass.getMethod(

                    "fromMillis", long.class);

            lastModifiedFileTimeObject = fileTimefromMillisMethod.invoke(

                    null, Long.valueOf(lastModifiedTime.getTime()));

        } else {

            lastModifiedFileTimeObject = null;

        }


        /* attrView.setTimes(lastModifiedFileTime, lastAccessFileTime,

         *     creationFileTime); */

        Method basicFileAttributeViewSetTimesMethod = basicFileAttributeViewClass

                .getMethod("setTimes", fileTimeClass, fileTimeClass,

                        fileTimeClass);

        try {

            basicFileAttributeViewSetTimesMethod.invoke(attrViewObject,

                    lastModifiedFileTimeObject, lastAccessFileTimeObject,

                    creationFileTimeObject);

        } catch (InvocationTargetException ex) {

            final Throwable cause = ex.getCause();

            if (cause instanceof ClassNotFoundException) {

                throw (ClassNotFoundException) cause;

            } else if (cause 
展开阅读全文