Java-filklassen

1. Oversikt

I denne opplæringen vil vi gi en oversikt over Fil klasse, som er en del av java.io API. De Fil klasse gir oss muligheten til å jobbe med filer og kataloger på filsystemet.

2. Opprette en Fil Gjenstand

De Fil klasse har 4 offentlige konstruktører. Avhengig av utviklerens behov, forskjellige typer forekomster av Fil klasse kan opprettes.

  • Fil (strengbanenavn) - Oppretter en forekomst som representerer det gitte stienavn
  • Fil (strengforelder, strengbarn) - Oppretter en forekomst som representerer banen dannet ved å bli med i foreldre og barn stier
  • File (File parent, String child) - Oppretter en forekomst med banen dannet ved å bli med i foreldre sti representert av en annen Fil forekomst og barn sti
  • Fil (URI uri) - Oppretter en forekomst som representerer den gitte Uniform Resource Identifier

3. Arbeide med Fil Klasse

De Fil klasse har en rekke metoder som lar oss jobbe med og manipulere filer på filsystemet. Vi vil trekke frem noen av dem her. Det er viktig å merke seg at Fil klasse kan ikke endre eller få tilgang til innholdet i filen den representerer.

3.1. Opprette og slette kataloger og filer

De Fil klasse har instansmetoder for å opprette og slette kataloger og filer. Kataloger og filer er opprettet ved hjelp av mkdir og createNewFile metoder, henholdsvis.

Kataloger og filer er slettet ved hjelp av slett metode. Alle disse metodene returnerer a boolsk verdi som er ekte når operasjonen lykkes, og falsk ellers:

@Test offentlig ugyldighet gittDir_whenMkdir_thenDirIsDeleted () {Filkatalog = ny fil ("dir"); assertTrue (katalog.mkdir ()); assertTrue (directory.delete ()); } @Test offentlig ugyldig givenFile_whenCreateNewFile_thenFileIsDeleted () {File file = new File ("file.txt"); prøv {assertTrue (file.createNewFile ()); } fange (IOException e) {fail ("Kunne ikke opprette" + "file.txt"); } assertTrue (file.delete ()); }

I utdraget ovenfor ser vi også andre nyttige metoder.

De isDirectory metode kan brukes til å teste om filen angitt med det oppgitte navnet er en katalog, mens de isFile metode kan brukes til å teste om filen angitt med det oppgitte navnet er en fil. Og vi kan bruke de eksisterer metode for å teste om det allerede finnes en katalog eller fil på systemet.

3.2. Få metadata om filforekomster

De Fil klasse har en rekke metoder som returnerer metadata om Fil tilfeller. La oss se hvordan du bruker getName, getParentFile, og getPath metoder:

@Test offentlig ugyldig 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 opprette" + "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 illustrert validering av metadata om filen som ble opprettet i katalogen. Vi har også vist hvordan du finner foreldrene til filen og den relative banen til den filen.

3.3. Angi fil- og katalogtillatelser

De Fil klasse har metoder som lar deg angi tillatelser til en fil eller en katalog. Her skal vi se på setWritable og settLesbarmetoder:

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

I koden ovenfor prøver vi å skrive til en fil etter at vi eksplisitt har satt tillatelser til den som blokkerer for eventuelle skrivinger. Vi gjør dette med setWritable metode. Det er ikke tillatt å prøve å skrive til en fil når du skriver til filen IO Unntak blir kastet.

Deretter prøver vi å lese fra en fil etter å ha satt tillatelser til den som blokkerer lesninger. Lesing blokkeres ved hjelp av settLesbar metode:

@Test offentlig ugyldig givenWriteOnlyFile_whenCreateNewFile_thenCantReadFile () {File parentDir = makeDir ("writeDir"); File child = new File (parentDir, "file.txt"); prøv {child.createNewFile (); } fange (IOException e) {fail ("Kunne ikke opprette" + "file.txt"); } child.setReadable (false); boolsk lesbar = sann; prøv (FileInputStream fis = ny FileInputStream (underordnet)) {fis.read (); // read operation} catch (IOException e) {readable = false; } til slutt {removeDir (parentDir); } assertFalse (lesbar); }

En gang til, JVM vil kaste a IO Unntak for forsøk på å lese en fil der lesing ikke er tillatt.

3.4. Oppføring av filer i en katalog

De Fil klasse har metoder som lar oss liste opp filer som finnes i en katalog. På samme måte kan kataloger også bli oppført. Her ser vi på liste og liste (FilnavnFilter) metoder:

@Test offentlig ugyldig 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 opprette" + fil); }} // normal oppføring assertEquals (2, parentDir.list (). lengde); // filtrert oppføring FilnavnFilter csvFilter = (dir, ext) -> ext.endsWith (". csv"); assertEquals (1, parentDir.list (csvFilter) .length); removeDir (parentDir); }

Vi opprettet en katalog og la til to filer i den - en med en csv utvidelse og den andre med en tekst Utvidelse. Når du lister opp alle filene i katalogen, får vi to filer som forventet. Når vi filtrerer oppføringen ved å filtrere rundt filer med en csv utvidelse, får vi bare en fil returnert.

3.5. Endre navn på filer og kataloger

De Fil klasse har funksjonaliteten til å gi nytt navn til filer og kataloger bruker endre navn til metode:

@Test offentlig ugyldighet gittDir_whenMkdir_thenCanRenameDir () {Filkilde = makeDir ("kilde"); Fil destinasjon = makeDir ("destinasjon"); boolsk omdøpt = source.renameTo (destinasjon); hvis (omdøpt) {assertFalse (source.isDirectory ()); assertTrue (destinasjon.isDirectory ()); removeDir (destinasjon); }}

I eksemplet ovenfor oppretter vi to kataloger - kilden og destinasjonskatalogene. Vi da endre kildekatalogen til destinasjonskatalogen ved hjelp av endre navn til metode. Det samme kan brukes til å gi nytt navn til filer i stedet for kataloger.

3.6. Få diskplassinformasjon

De Fil klasse lar oss også få informasjon om diskplass. La oss se a demonstrasjon av getFreeSpace metode:

@Test offentlig ugyldig 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 (sample); } fange (IOException e) {fail ("Kunne ikke skrive til" + "sample.txt"); } lang freeSpaceAfter = testDir.getFreeSpace (); assertTrue (freeSpaceAfter <freeSpaceBefore); removeDir (testDir); }

I dette eksemplet opprettet vi en katalog i brukerens hjemmekatalog og opprettet deretter en fil i den. Vi sjekket deretter om ledig plass på hjemmekatalogpartisjonen hadde endret seg etter å ha fylt ut denne filen med litt tekst. Andre metoder som gir informasjon om diskplass er getTotalSpace og getUsableSpace.

4. Konklusjon

I denne opplæringen har vi vist noe av funksjonaliteten Fil klasse sørger for arbeid med filer og kataloger på filsystemet. .

Som alltid er hele kildekoden til eksemplet tilgjengelig på Github.


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