Ho bisogno di rendere i file e le cartelle nascosti su Windows e Linux. So che aggiungendo un '.' in primo piano un file o una cartella lo renderà nascosto su Linux. Come faccio a nascondere un file o una cartella su Windows?Crea un file/cartella nascosto su Windows con Java
risposta
Per Java 6 e sotto,
Sarà necessario utilizzare una chiamata nativa, qui è un modo per le finestre
Runtime.getRuntime().exec("attrib +H myHiddenFile.java");
Si dovrebbe imparare un po 'di Win32 API o Java Native.
La funzionalità che si desidera è una caratteristica di NIO.2 nel prossimo Java 7.
Ecco un articolo che descrive come sarà utilizzato per quello che ti serve: Managing Metadata (File and File Store Attributes). C'è un esempio con 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);
}
impostazione attributi può essere fatto utilizzando DosFileAttributeView
Considerando questi fatti, dubito che ci sia uno standard e modo elegante per realizzare questo in Java 6 o Java 5.
questo è quello che uso:
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.
}
Java 7 può nascondere un file DOS in questo modo:
Path path = ...;
Boolean hidden = path.getAttribute("dos:hidden", LinkOption.NOFOLLOW_LINKS);
if (hidden != null && !hidden) {
path.setAttribute("dos:hidden", Boolean.TRUE, LinkOption.NOFOLLOW_LINKS);
}
In precedenza Java non può.
Il codice precedente non genera un'eccezione su sistemi di file non DOS. Se il nome del file inizia con un punto, sarà nascosto anche sui sistemi di file UNIX.
Il metodo getAttribute (String, LinkOption) non è definito per il tipo java.nio.file.Path (JDK 7u13) – Antonio
Antonio, deve essere stato così nella versione bozza di Java 7 che ho utilizzato. Vedo che la funzionalità simile è ora in java.nio.file.Files. –
È possibile utilizzare 'Files.setAttribute' che accetterà un' Percorso' su cui impostare l'attributo. –
String cmd1[] = {"attrib","+h",file/folder path};
Runtime.getRuntime().exec(cmd1);
Usa questo codice si potrebbe risolvere si problema
sulle finestre, utilizzando Java nio, file
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
Aggiungi una descrizione di come il codice che hai postato risponde alla domanda dell'utente – Suever
Ecco un codice Java 7 di esempio completamente compilabile che nasconde un file arbitrario su 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());
}
}
Per verificare che il file sia nascosto. Fai clic destro sul file in questione e vedrai dopo l'esecuzione del tribunale che il file in questione è veramente nascosto.
"nativo" significa che si sta eseguendo codice specifico della piattaforma. 'exec()' attiva una shell DOS/Windows per eseguire un programma DOS/Windows. –
Sei un risparmiatore di vita !!! –
cosa succede quando questo codice viene eseguito in Linux? O come lo prevengo? – Xerus