Contents ...
udn網路城邦
Java 7如何操縱文件屬性
2015/09/22 21:06
瀏覽393
迴響0
推薦0
引用0
準備寫點基礎性的文章,Java 7已經出來很長一段時間了,但是很多Java程序員仍然停留在早期的Java 5或Java 6的基礎上,對Java 7的新特性從未加以使用。本文介紹如何利用Java 7的NIO包讀取文件屬性以及修改文件屬性。詳情如下:

1、讀取文件屬性



import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.attribute.BasicFileAttributes;

import java.util.logging.Level;

import java.util.logging.Logger;


public class ReadFileAttribute1 {

    public static void main(String[] args){

        Path filePath = Paths.get("d:\\test.txt");

        try{

            BasicFileAttributes ra = Files.readAttributes(filePath, BasicFileAttributes.class);

            System.out.println("CREATION TIME:" + ra.creationTime());

            System.out.println("LAST ACCESS TIME:" + ra.lastAccessTime());

            System.out.println("FILE SIZE:" + ra.size());

            System.out.println("LAST MODIFIED:" + ra.lastModifiedTime());

            System.out.println("IS SYSBOLIC LINK:" + ra.isSymbolicLink());

            System.out.println("IS FOLDER:" + ra.isDirectory());

            System.out.println("IS FILE:" + ra.isRegularFile());


        }catch(IOException e){

            Logger.getLogger(ReadFileAttribute1.class.getName()).log(Level.SEVERE, null, e);

        }

    }

}

輸出結果:

CREATION TIME:2013-04-09T05:45:30.685152Z

LAST ACCESS TIME:2013-08-12T00:30:43.19369Z

FILE SIZE:32

LAST MODIFIED:2013-12-10T13:35:08.438828Z

IS SYSBOLIC LINK:false

IS FOLDER:false

IS FILE:true


2、另一種讀取文件屬性的方法



import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.util.logging.Level;

import java.util.logging.Logger;


public class ReadFileAttribute2 {

    public static void main(String[] args){

        Path fp = Paths.get("D:\\test.txt");

        try{

            Files.getAttribute(fp, "basic:size");

            System.out.println("CREATION TIME:" + Files.getAttribute(fp, "basic:creationTime").toString());

            System.out.println("LAST ACCESS TIME:" + Files.getAttribute(fp, "basic:lastAccessTime").toString());

            System.out.println("FILE SIZE:" + Files.getAttribute(fp, "basic:size").toString());

            System.out.println("LAST MODIFIED:" + Files.getAttribute(fp, "basic:lastModifiedTime").toString());

            System.out.println("IS SYSBOLIC LINK:" + Files.getAttribute(fp, "basic:isSymbolicLink").toString());

            System.out.println("IS FOLDER:" + Files.getAttribute(fp, "basic:isDirectory").toString());

            System.out.println("IS FILE:" + Files.getAttribute(fp, "basic:isRegularFile").toString());

        }catch(IOException e){

            Logger.getLogger(ReadFileAttribute2.class.getName()).log(Level.SEVERE, null, e);

        }


    }

}

輸出結果:

CREATION TIME:2013-04-09T05:45:30.685152Z

LAST ACCESS TIME:2013-08-12T00:30:43.19369Z

FILE SIZE:32

LAST MODIFIED:2013-12-10T13:35:08.438828Z

IS SYSBOLIC LINK:false

IS FOLDER:false

IS FILE:true


3、修改文件屬性



import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.attribute.BasicFileAttributes;

import java.nio.file.attribute.FileTime;

import java.util.logging.Level;

import java.util.logging.Logger;


public class UpdateFileAttribute1 {

    public static void main(String[] args){

        Path fp = Paths.get("D:\\test.txt");

        try{

            BasicFileAttributes ra = Files.readAttributes(fp, BasicFileAttributes.class);

            long currentTimeMillis = System.currentTimeMillis();

            FileTime fileTime = FileTime.fromMillis(currentTimeMillis);

            Files.setAttribute(fp, "basic:creationTime", fileTime);

            FileTime creationTime = (FileTime)Files.getAttribute(fp, "basic:creationTime");

            System.out.println("NEW CREATION TIME:" + creationTime.toString());

            System.out.println("OLD CREATION TIME:" + ra.creationTime());

        }catch(IOException e){

            Logger.getLogger(UpdateFileAttribute1.class.getName()).log(Level.SEVERE, null, e);

        }

    }

}

輸出結果:

NEW CREATION TIME:2013-12-10T15:04:26.159Z

OLD CREATION TIME:2013-04-09T05:45:30.685152Z


4、還可以修改文件別的屬性



import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.attribute.BasicFileAttributes;

import java.nio.file.attribute.FileTime;

import java.util.logging.Level;

import java.util.logging.Logger;


public class UpdateFileAttribute2 {

    public static void main(String[] args){

        Path fp = Paths.get("D:\\test.txt");

        try{

            BasicFileAttributes ra = Files.readAttributes(fp, BasicFileAttributes.class);

            long currentTimeMillis = System.currentTimeMillis();

            FileTime fileTime = FileTime.fromMillis(currentTimeMillis);

            Files.setAttribute(fp, "basic:lastAccessTime", fileTime);

            FileTime creationTime = (FileTime)Files.getAttribute(fp, "basic:lastAccessTime");

            System.out.println("NEW LAST-ACCESS-TIME:" + creationTime.toString());

            System.out.println("OLD LAST-ACCESS-TIME:" + ra.lastAccessTime());

        }catch(IOException e){

            Logger.getLogger(UpdateFileAttribute2.class.getName()).log(Level.SEVERE, null, e);

        }

    }

}

輸出結果:

NEW LAST-ACCESS-TIME:2013-12-10T15:07:46.261Z

OLD LAST-ACCESS-TIME:2013-08-12T00:30:43.19369Z


5、另一種修改文件屬性的方法



import java.io.IOException;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.attribute.BasicFileAttributes;

import java.nio.file.attribute.FileTime;

import java.util.logging.Level;

import java.util.logging.Logger;


public class UpdateFileAttribute3 {

    public static void main(String[] args){

        Path fp = Paths.get("D:\\test.txt");

        try{

            BasicFileAttributes ra = Files.readAttributes(fp, BasicFileAttributes.class);

            long currentTimeMillis = System.currentTimeMillis();

            FileTime fileTime = FileTime.fromMillis(currentTimeMillis);

            Files.setLastModifiedTime(fp, fileTime);

            FileTime time = (FileTime)Files.getAttribute(fp, "basic:lastModifiedTime");

            System.out.println("NEW LAST-MODIFIED-TIME:" + time.toString());

            System.out.println("OLD LAST-MODIFIED-TIME:" + ra.lastModifiedTime());

        }catch(IOException e){

            Logger.getLogger(UpdateFileAttribute3.class.getName()).log(Level.SEVERE, null, e);

        }

    }

}

輸出結果:

NEW LAST-MODIFIED-TIME:2013-12-10T15:13:07.134Z

OLD LAST-MODIFIED-TIME:2013-12-10T13:35:08.438828Z

限會員,要發表迴響,請先登入