"Hej, Amigo. Længe, ​​nej se."

"Hej Bilaabo. Hvad vil du tale om?"

"I dag skal jeg fortælle dig om at arbejde med filer.  Java har en speciel klasse (File), som du kan bruge til at administrere filer på en harddisk. Til håndtering af filindhold er der andre klasser: FileInputStream, FileOutputStream osv. "

Fil, filer, sti - 1

"Interessant. Men når du siger 'administrer filer', hvad mener du så?"

"Det er lige hvad jeg vil forklare nu. Filer kan oprettes, slettes, omdøbes og meget mere. Du kan sende et File-objekt til praktisk talt hver klasse, der arbejder med (læser, skriver, ændrer) indholdet af en fil . For eksempel:"

Du kan sende filnavnet direkte til FileInputStream
FileInputStream input = new FileInputStream("c:/path/a.txt");
Eller du kan oprette et File-objekt separat og derefter sende det til FileInputStrea
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);

"Men den anden mulighed er længere. Jeg forstår stadig ikke, hvorfor vi har brug for disse filobjekter."

"For dette specifikke eksempel har du ret. "Dette er ikke et eksempel på, hvordan du skal gøre det, men snarere hvordan du kan gøre det.
Men forestil dig, at du skal vise en liste over alle filer, der er placeret i en bestemt mappe. Sådan kan dette gøres ved hjælp af filobjekter:"

Kode
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

"Er listFiles() en metode, der returnerer en liste over filer i mappen angivet med «c:/path/»?"

"Ja. Men programmører siger normalt 'mappe'. Begrebet 'mappe' kom i brug relativt for nylig, men i princippet er begge udtryk korrekte, og du kan sige, hvilken du foretrækker."

"OK. Og hvad gør getName ()? Returnerer navnet på filen? Hvad er der præcist inkluderet i navnet? Det fulde navn inklusive stien, eller blot navnet på selve filen?"

"Kun navnet på selve filen. For den fulde sti er der file.getAbsolutePath()."

"Så hvilke andre metoder har File-klassen?"

"Tag et kig på dette:"

Metode Beskrivelse
boolean isDirectory() Er File-objektet en mappe?
boolean isFile() Er objektet en fil?
long length() Returnerer filstørrelsen/-længden i bytes.
boolean createNewFile() Opretter en ny, tom fil, hvis en fil med dette navn endnu ikke eksisterer.
boolean mkdir() Opretter en mappe. Navnet «mkdir» kommer fra «make directory».
boolean mkdirs() Opretter en mappe og alle dens undermapper.
boolean delete() Sletter den fil, der er knyttet til objektet. Hvis objektet er et bibliotek, slettes biblioteket kun, hvis der ikke er nogen filer i det.
void deleteOnExit() Tilføjer filen til en speciel liste over filer, der automatisk slettes, når programmet afsluttes.
File createTempFile(
String prefix,
String suffix,
File directory)
Opretter en midlertidig fil med et tilfældigt genereret unikt navn, noget som «dasd4d53sd».
Yderligere parametre er et navnepræfiks og et suffiks. Hvis en mappe ikke er angivet, oprettes filen i en speciel OS-mappe til midlertidige filer.
boolean exists() Returnerer sand, hvis en fil med samme navn findes på harddisken.
String getAbsolutePath() Returnerer den fulde sti til filen med alle dens undermapper.
String getCanonicalPath() Returnerer den kanoniske filsti.
Konverterer f.eks. stien «c:/dir/dir2/../a.txt» til «c:/dir/a.txt»
String[] list() Returnerer en matrix af navnene på filer, der er indeholdt i mappen repræsenteret af det aktuelle objekt.
File[] listFiles() Returnerer en matrix af filer, der er indeholdt i mappen repræsenteret af det aktuelle File-objekt.
long getTotalSpace() Returnerer mængden af ​​samlet plads (antal bytes) på den disk, hvorpå filen er placeret.
long getFreeSpace() Returnerer mængden af ​​ledig plads (antal bytes) på den disk, hvor filen er placeret.
boolean renameTo(File) Omdøber filen, dvs. indholdet af filen får faktisk et nyt navn. Du kan med andre ord omdøbe filen «c:/dir/a.txt» til «d:/out/text/b.doc».
String getName() Returnerer kun filnavnet uden stien.
String getParent() Returnerer kun stien (biblioteket) til den aktuelle fil uden selve navnet.
Path toPath() Returnerer et Sti-objekt, der svarer til det aktuelle Fil-objekt.

"Hov! Ikke en meget lille liste, hva'? Og det ser ud til, at du kan gøre ret meget med det: oprette og slette filer, omdøbe dem,..."

"Så for at få mappen til den aktuelle fil, skal jeg ringe til getParent()?"

"Ja, men den returnerer en streng - filstien - ikke et File-objekt. Faktisk dublerer File-klassen næsten alle dens metoder: en version returnerer en streng, den anden - et File-objekt. Tjek det ud:"

File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();

Hvis du har en streng med filstien, og du har brug for et File- objekt, så brug konstruktøren. Hvis situationen er omvendt (du har et File- objekt, men du skal bruge en streng), så brug getAbsolutePath (). For eksempel:"

String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();

"Forstået."

"Fantastisk. Så er her en lille opgave til dig: vis navnene på alle filerne i samme mappe som den aktuelle fil."

"Intet kunne være nemmere. Se her:"

Kode
//Some file
File originalFile = new File("c:/path/dir2/a.txt");

//An object representing the directory
File folder = originalFile.getParentFile();

//Print the file list on screen
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

"Hmm. Korrekt."

"Men det er lidt forvirrende, at den samme klasse ― File ― bruges til både filen og mappen. Det virker ikke særlig logisk for mig."

"Det fungerede på den måde af historiske årsager. En mappe plejede at være en særlig 'tom' fil på disken. Selvfølgelig har meget ændret sig nu, men ikke alt. Det er alt, hvad jeg har i dag."

"Tak for den interessante lektion, Bilaabo."