Java Academy · Oppitunti

Files-apuohjelma: lue, kirjoita, kopioi ja siirrä

Käytä metodeja Files.readString, writeString, copy, move ja delete yleisiin tiedostotoimintoihin.

Oppitunti 2/413 vaihetta

Files-apuohjelma: lue, kirjoita, kopioi ja siirrä on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

Files-luokka

java.nio.file.Files-luokka tarjoaa staattisia apumetodeja tiedostojen lukemiseen, kirjoittamiseen, kopioimiseen, siirtämiseen ja kyselyihin. Se korvaa monisanaisen FileInputStream/FileOutputStream-koodin toiston.

import java.nio.file.*;
import java.io.IOException;

Path file = Path.of("example.txt");
// All Files methods throw IOException — handle or propagate

Tiedostojen lukeminen

Nykyaikaiset metodit tiedoston koko sisällön lukemiseen:

Path path = Path.of("notes.txt");

// Read as a single String (Java 11+)
String content = Files.readString(path);
System.out.println(content);

// Read as List of lines
List<String> lines = Files.readAllLines(path);
lines.forEach(System.out::println);

// Read as byte array
byte[] bytes = Files.readAllBytes(path);

Tiedostojen kirjoittaminen

Kirjoita merkkijono tai rivikokoelma tiedostoon yhdellä kutsulla:

Path out = Path.of("output.txt");

// Write a String (overwrites by default)
Files.writeString(out, "Hello, NIO.2!");

// Write with StandardOpenOption.APPEND
Files.writeString(out, "\nAppended line", StandardOpenOption.APPEND);

// Write lines
List<String> lines = List.of("line1", "line2", "line3");
Files.write(out, lines);

Tiedoston ominaisuuksien tarkistaminen

Hae tiedoston metatiedot avaamatta tiedostoa:

Path path = Path.of("data.txt");

System.out.println(Files.exists(path));       // true/false
System.out.println(Files.isRegularFile(path)); // true if not dir
System.out.println(Files.isDirectory(path));   // true if dir
System.out.println(Files.isReadable(path));    // readable?
System.out.println(Files.size(path));          // bytes
System.out.println(Files.getLastModifiedTime(path));

Tiedostojen kopioiminen

Files.copy(source, target) kopioi tiedoston. Käytä StandardCopyOption-luokkaa toiminnan ohjaamiseen:

Path src = Path.of("original.txt");
Path dst = Path.of("backup.txt");

// Throws if destination exists (default)
Files.copy(src, dst);

// Overwrite if exists:
Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);

// Copy preserving file timestamps:
Files.copy(src, dst, StandardCopyOption.COPY_ATTRIBUTES);

Tiedostojen siirtäminen ja nimeäminen uudelleen

Files.move() siirtää tiedoston tai nimeää sen uudelleen. Atominen siirto on mahdollinen ATOMIC_MOVE-asetuksella:

Path from = Path.of("temp.txt");
Path to   = Path.of("archive/report_2024.txt");

Files.move(from, to, StandardCopyOption.REPLACE_EXISTING);

// Rename in same directory:
Path renamed = from.resolveSibling("new_name.txt");
Files.move(from, renamed, StandardCopyOption.REPLACE_EXISTING);

Tiedostojen poistaminen

Kaksi poistometodia — toinen heittää poikkeuksen, jos kohdetta ei löydy, toinen ei:

Path file = Path.of("temp.txt");

// Throws NoSuchFileException if file doesn't exist:
Files.delete(file);

// Returns false if file didn't exist (no exception):
boolean deleted = Files.deleteIfExists(file);
System.out.println("Deleted: " + deleted);

Hakemistojen luominen

Luo hakemistoja, mukaan lukien kaikki puuttuvat välihakemistot:

Path dir = Path.of("output/reports/2024");

// Creates all missing intermediate directories:
Files.createDirectories(dir);

// Creates a single directory (fails if parent missing):
Files.createDirectory(Path.of("output/reports/2025"));

Väliaikaistiedostot ja -hakemistot

Luo väliaikaistiedostoja turvallisesti — JVM voi siivota ne:

// Temp file in default temp directory
Path tmp = Files.createTempFile("prefix_", ".txt");
Files.writeString(tmp, "temp data");
System.out.println(tmp); // something like /tmp/prefix_12345.txt

// Temp directory
Path tmpDir = Files.createTempDirectory("work_");
System.out.println(tmpDir);

Rivien käsittely Files.lines-metodilla

Files.lines() palauttaa laiskan Stream<String>-virran — se sopii suurille tiedostoille paremmin kuin readAllLines, koska se ei lataa kaikkea muistiin:

try (var stream = Files.lines(Path.of("large.log"))) {
    long errorCount = stream
        .filter(l -> l.contains("ERROR"))
        .count();
    System.out.println("Errors: " + errorCount);
} // stream (and underlying reader) closed automatically

Classpath-resurssien lukeminen

Yhdistä getClass().getResourceAsStream() ja NIO-kopiointi resurssien lataamista varten:

try (var in = getClass().getResourceAsStream("/config.json")) {
    Path tmp = Files.createTempFile("config", ".json");
    Files.copy(in, tmp, StandardCopyOption.REPLACE_EXISTING);
    String json = Files.readString(tmp);
    System.out.println(json);
}

Pikatarkistus

Mitä metodia pitäisi käyttää suuren lokitiedoston lukemiseen, kun kaikkia rivejä ei haluta ladata muistiin samanaikaisesti?

Kertaus: Files-apumetodit

Tärkeimmät asiat:

  • Files.readString/readAllLines/readAllBytes — lukevat koko tiedoston
  • Files.writeString/write — kirjoittavat merkkijonon tai rivejä
  • Files.copy/move ja StandardCopyOption — kopioimiseen, uudelleennimeämiseen ja siirtämiseen
  • Files.delete/deleteIfExists — turvalliseen poistamiseen
  • Files.lines — laiska virta suurille tiedostoille (käytä try-with-resources-rakennetta)
Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Files-apuohjelma: lue, kirjoita, kopioi ja siirrä” ilmainen?

Kyllä – oppitunnin ”Files-apuohjelma: lue, kirjoita, kopioi ja siirrä” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Files-apuohjelma: lue, kirjoita, kopioi ja siirrä”?

Käytä metodeja Files.readString, writeString, copy, move ja delete yleisiin tiedostotoimintoihin. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Files-apuohjelma: lue, kirjoita, kopioi ja siirrä”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Path: tiedostojen sijaintien esittäminen
  2. Files-apuohjelma: lue, kirjoita, kopioi ja siirrä
  3. Hakemistopuiden läpikäynti Files.walk-metodilla
  4. WatchService: tiedostomuutosten valvonta
← Takaisin: Java Academy