Java-filklassen

1. Oversigt

I denne vejledning giver vi et overblik over Fil klasse, som er en del af java.io API. Det Fil klasse giver os muligheden for at arbejde med filer og mapper på filsystemet.

2. Oprettelse af en Fil Objekt

Det Fil klasse har 4 offentlige konstruktører. Afhængig af udviklerens behov, forskellige typer forekomster af Fil klasse kan oprettes.

  • Fil (streng stienavn) - Opretter en instans, der repræsenterer det givne stienavn
  • Fil (strengforælder, strengbarn) - Opretter en instans, der repræsenterer stien dannet ved at slutte sig til forælder og barn stier
  • File (File parent, String child) - Opretter en instans med stien dannet ved at slutte sig til forælder sti repræsenteret af en anden Fil instans og barn sti
  • Fil (URI uri) - Opretter en instans, der repræsenterer den givne Uniform Resource Identifier

3. Arbejde med Fil Klasse

Det Fil klasse har en række metoder, der giver os mulighed for at arbejde med og manipulere filer på filsystemet. Vi vil fremhæve nogle af dem her. Det er vigtigt at bemærke, at Fil klasse kan ikke ændre eller få adgang til indholdet af den fil, den repræsenterer.

3.1. Oprettelse og sletning af mapper og filer

Det Fil klasse har instansmetoder til at oprette og slette mapper og filer. Kataloger og filer er oprettet ved hjælp af mkdir og createNewFile metoder, henholdsvis.

Kataloger og filer er slettet ved hjælp af slet metode. Alle disse metoder returnerer a boolsk værdi, der er rigtigt når operationen lykkes, og falsk Ellers:

@Test offentligt ugyldigt givenDir_whenMkdir_thenDirIsDeleted () {File directory = new File ("dir"); assertTrue (katalog.mkdir ()); assertTrue (directory.delete ()); } @ Test offentligt ugyldigt givenFile_whenCreateNewFile_thenFileIsDeleted () {File file = new File ("file.txt"); prøv {assertTrue (file.createNewFile ()); } fange (IOException e) {fail ("Kunne ikke oprette" + "file.txt"); } assertTrue (file.delete ()); }

I ovenstående uddrag ser vi også andre nyttige metoder.

Det isDirectory metode kan bruges til at teste, om filen angivet med det angivne navn er en mappe, mens det isFil metode kan bruges til at teste, om filen angivet med det angivne navn er en fil. Og vi kan bruge det eksisterer metode for at teste, om der allerede findes en mappe eller fil på systemet.

3.2. Få metadata om filforekomster

Det Fil klasse har en række metoder, der returnerer metadata om Fil tilfælde. Lad os se, hvordan du bruger getName, getParentFile, og getPath metoder:

@Test offentlig ugyldighed givenFile_whenCreateNewFile_thenMetadataIsCorrect () {String sep = File.separator; Fil parentDir = makeDir ("filesDir"); File child = new File (parentDir, "file.txt"); prøv {child.createNewFile (); } fange (IOException e) {fail ("Kunne ikke oprette" + "file.txt"); } assertEquals ("file.txt", child.getName ()); assertEquals (parentDir.getName (), child.getParentFile (). getName ()); assertEquals (parentDir.getPath () + sep + "file.txt", child.getPath ()); removeDir (parentDir); }

Her har vi illustreret validering af metadata om filen, der blev oprettet inde i biblioteket. Vi har også vist, hvordan man finder filens overordnede og den relative sti til den fil.

3.3. Indstilling af fil- og katalogtilladelser

Det Fil klasse har metoder, der giver dig mulighed for at indstille tilladelser til en fil eller et bibliotek. Her ser vi på setWritable og sætLæsbarmetoder:

@Test offentlig ugyldighed givenReadOnlyFile_whenCreateNewFile_thenCantModFile () {File parentDir = makeDir ("readDir"); File child = new File (parentDir, "file.txt"); prøv {child.createNewFile (); } fange (IOException e) {fail ("Kunne ikke oprette" + "file.txt"); } child.setWritable (false); boolsk skrivbar = sand; prøv (FileOutputStream fos = ny FileOutputStream (barn)) {fos.write ("Hello World" .getBytes ()); // skriv operation fos.flush (); } fange (IOException e) {skrivbar = falsk; } endelig {removeDir (parentDir); } assertFalse (skrivbar); }

I koden ovenfor forsøger vi at skrive til en fil, efter at vi udtrykkeligt har indstillet tilladelser til den, der blokerer for skrivning. Vi gør dette med setWritable metode. Forsøg på at skrive til en fil, når du skriver til filen, er ikke tilladt resulterer i IOUndtagelse bliver kastet.

Dernæst forsøger vi at læse fra en fil efter indstilling af tilladelser til den, der blokerer for læsninger. Læsning blokeres ved hjælp af sætLæsbar metode:

@Test offentlig ugyldighed givenWriteOnlyFile_whenCreateNewFile_thenCantReadFile () {File parentDir = makeDir ("writeDir"); File child = new File (parentDir, "file.txt"); prøv {child.createNewFile (); } fange (IOException e) {fail ("Kunne ikke oprette" + "file.txt"); } child.setReadable (false); boolsk læsbar = sand; prøv (FileInputStream fis = ny FileInputStream (underordnet)) {fis.read (); // read operation} catch (IOException e) {readable = false; } endelig {removeDir (parentDir); } assertFalse (læsbar); }

Igen, JVM vil kaste en IOUndtagelse til forsøg på at læse en fil, hvor læsning ikke er tilladt.

3.4. Notering af filer inde i et bibliotek

Det Fil klasse har metoder, der giver os mulighed for at liste filer indeholdt i en mappe. På samme måde kan mapper også vises. Her ser vi på liste og liste (FilnavnFilter) metoder:

@Test offentlig ugyldighed givenFilesInDir_whenCreateNewFile_thenCanListFiles () {File parentDir = makeDir ("filtersDir"); Streng [] filer = {"file1.csv", "file2.txt"}; for (String file: files) {prøv {new File (parentDir, file) .createNewFile (); } fange (IOException e) {fail ("Kunne ikke oprette" + fil); }} // normal liste assertEquals (2, parentDir.list (). længde); // filtreret liste FilenameFilter csvFilter = (dir, ext) -> ext.endsWith (". csv"); assertEquals (1, parentDir.list (csvFilter) .length); removeDir (parentDir); }

Vi oprettede en mappe og tilføjede to filer til den - en med en csv udvidelse og den anden med en txt udvidelse. Når vi viser alle filer i biblioteket, får vi to filer som forventet. Når vi filtrerer listen ved at filtrere omkring filer med en csv udvidelse, får vi kun én fil returneret.

3.5. Omdøbning af filer og mapper

Det Fil klasse har funktionaliteten ved at omdøbe filer og mapper bruger omdøbe til metode:

@Test offentligt ugyldigt givenDir_whenMkdir_thenCanRenameDir () {File source = makeDir ("source"); Fil destination = makeDir ("destination"); boolsk omdøbt = source.renameTo (destination); hvis (omdøbt) {assertFalse (source.isDirectory ()); assertTrue (destination.isDirectory ()); removeDir (destination); }}

I eksemplet ovenfor opretter vi to mapper - kilden og destinationsmapperne. Vi derefter omdøbe kildekataloget til destinationskataloget ved hjælp af omdøbe til metode. Det samme kan bruges til at omdøbe filer i stedet for mapper.

3.6. Få oplysninger om diskplads

Det Fil klasse giver os også mulighed for at få diskpladsinformation. Lad os se en demonstration af getFreeSpace metode:

@Test offentlig ugyldighed givenDataWritten_whenWrite_thenFreeSpaceReduces () {String home = System.getProperty ("user.home"); Streng sep = File.separator; Fil testDir = makeDir (hjem + sep + "test"); Fileksempel = ny fil (testDir, "sample.txt"); lang freeSpaceBefore = testDir.getFreeSpace (); prøv {writeSampleDataToFile (prøve); } fange (IOException e) {fail ("Kunne ikke skrive til" + "sample.txt"); } lang freeSpaceAfter = testDir.getFreeSpace (); assertTrue (freeSpaceAfter <freeSpaceBefore); removeDir (testDir); }

I dette eksempel oprettede vi en mappe inde i brugerens hjemmemappe og oprettede derefter en fil i den. Vi kontrollerede derefter, om den ledige plads på hjemmekatalogpartitionen var ændret efter at have udfyldt denne fil med noget tekst. Andre metoder, der giver information om diskplads er getTotalSpace og getUsableSpace.

4. Konklusion

I denne vejledning har vi vist nogle af funktionerne Fil klasse giver mulighed for at arbejde med filer og mapper på filsystemet. .

Som altid er den fulde kildekode i eksemplet tilgængelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found