2009-08-18 75 views
21

Tôi cần phải đặt các tệp và thư mục bị ẩn trên cả Windows và Linux. Tôi biết rằng phụ thêm '.' ở phía trước của một tập tin hoặc thư mục sẽ làm cho nó ẩn trên Linux. Làm cách nào để tạo tệp hoặc thư mục bị ẩn trên Windows?Tạo một Tệp/Thư mục Ẩn trên Windows bằng Java

Trả lời

19

Đối với Java 6 và dưới đây,

Bạn sẽ cần phải sử dụng một cuộc gọi bản địa, đây là một cách cho các cửa sổ

Runtime.getRuntime().exec("attrib +H myHiddenFile.java"); 

Bạn nên tìm hiểu một chút về win32-api hoặc Java Native.

+4

"gốc" nghĩa là bạn đang chạy mã nền tảng cụ thể. 'exec()' kích hoạt một hệ vỏ DOS/Windows để thực thi chương trình DOS/Windows. –

+0

Bạn là người bảo vệ cuộc sống !!! –

+0

điều gì sẽ xảy ra khi mã này được thực thi trong Linux? Hoặc làm thế nào để ngăn chặn nó? – Xerus

20

Các chức năng mà bạn mong muốn là một tính năng của NIO.2 trong sắp tới Java 7.

Dưới đây là một bài viết mô tả nó như thế nào sẽ được sử dụng cho những gì bạn cần: Managing Metadata (File and File Store Attributes). Có một ví dụ với DOS File Attributes:

Path file = ...; 
try { 
    DosFileAttributes attr = Attributes.readDosFileAttributes(file); 
    System.out.println("isReadOnly is " + attr.isReadOnly()); 
    System.out.println("isHidden is " + attr.isHidden()); 
    System.out.println("isArchive is " + attr.isArchive()); 
    System.out.println("isSystem is " + attr.isSystem()); 
} catch (IOException x) { 
    System.err.println("DOS file attributes not supported:" + x); 
} 

thuộc tính Setting có thể được thực hiện bằng DosFileAttributeView

Xét những sự kiện này, tôi nghi ngờ rằng có một tiêu chuẩn và cách thanh lịch để thực hiện điều đó trong Java 6 hoặc Java 5.

3

đây là những gì tôi sử dụng:

void hide(File src) throws InterruptedException, IOException { 
    // win32 command line variant 
    Process p = Runtime.getRuntime().exec("attrib +h " + src.getPath()); 
    p.waitFor(); // p.waitFor() important, so that the file really appears as hidden immediately after function exit. 
} 
13

Java 7 có thể ẩn nộp DOS theo cách này:

01.
Path path = ...; 
Boolean hidden = path.getAttribute("dos:hidden", LinkOption.NOFOLLOW_LINKS); 
if (hidden != null && !hidden) { 
    path.setAttribute("dos:hidden", Boolean.TRUE, LinkOption.NOFOLLOW_LINKS); 
} 

Trước đó, Java không thể.

Đoạn mã trên sẽ không ném ngoại lệ lên các hệ thống tệp không phải của DOS. Nếu tên của tập tin bắt đầu với một khoảng thời gian, sau đó nó cũng sẽ được ẩn trên hệ thống tập tin UNIX.

+0

Phương thức getAttribute (String, LinkOption) là không xác định đối với loại java.nio.file.Path (JDK 7u13) – Antonio

+1

Antonio, nó phải được như vậy trong phiên bản dự thảo của Java 7 mà tôi đã sử dụng. Tôi thấy rằng chức năng tương tự hiện có trong java.nio.file.Files. –

+5

Bạn có thể sử dụng 'Files.setAttribute' để chấp nhận' Đường dẫn' để đặt thuộc tính. –

0
String cmd1[] = {"attrib","+h",file/folder path}; 
Runtime.getRuntime().exec(cmd1); 

Sử dụng mã này nó có thể giải quyết bạn vấn đề

2

trên cửa sổ, sử dụng java nio, tập tin

Path path = Paths.get(..); //< input target path 
Files.write(path, data_byte, StandardOpenOption.CREATE_NEW); //< if file not exist, create 
Files.setAttribute(path, "dos:hidden", Boolean.TRUE, LinkOption.NOFOLLOW_LINKS); //< set hidden attribute 
+2

Vui lòng thêm mô tả về cách mã bạn đăng địa chỉ câu hỏi của người dùng – Suever

1

Đây là một hoàn toàn compilable Java 7 mẫu mã mà giấu một tập tin tùy ý trên Windows .

import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.attribute.DosFileAttributes; 


class A { 
    public static void main(String[] args) throws Exception 
    { 
     //locate the full path to the file e.g. c:\a\b\Log.txt 
     Path p = Paths.get("c:\\a\\b\\Log.txt"); 

     //link file to DosFileAttributes 
     DosFileAttributes dos = Files.readAttributes(p, DosFileAttributes.class); 

     //hide the Log file 
     Files.setAttribute(p, "dos:hidden", true); 

     System.out.println(dos.isHidden()); 

    } 
} 

Để kiểm tra tệp bị ẩn. Nhấp chuột phải vào tệp được đề cập và bạn sẽ thấy sau khi thực thi tòa án rằng tệp được đề cập thực sự bị ẩn.

enter image description here

Các vấn đề liên quan