Inledning
Hantering av in- och utdata (IO) är en väsentlig komponent i nästan alla Java-applikationer. Java IO-hantering tillhandahåller de verktyg som behövs för att läsa in och skriva ut data från skilda platser, som filer, nätverk och enheter. Den här detaljerade guiden utforskar Java IO-hanteringsmetoderna i detalj och ger praktiska exempel på hur man på ett effektivt sätt läser, skriver, lagrar och bearbetar information.
Läsa från Filer
Följande steg används för att läsa data från en fil i Java:
- Öppna filen: Använd klassen
java.io.File
för att skapa ett filobjekt som identifierar filen och klassenjava.io.FileReader
för att initiera enFileReader
mot filen. - Hämta information: Använd
FileReader
för att överföra data från filen till enBufferedReader
.BufferedReader
ger metoder somreadLine()
ochread()
för att läsa information radvis eller teckenvis. - Stäng filen: När läsningen är klar, stäng
BufferedReader
ochFileReader
för att frigöra systemresurser.
Exempel på Filinläsning
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class LäsFil {
public static void main(String[] args) {
try {
// Öppna filen
File file = new File("fil.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
// Läs data från filen
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
// Stäng filen
bufferedReader.close();
fileReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Skriva till Filer
Nedan följer stegen för att skriva data till en fil i Java:
- Öppna filen: Använd
java.io.File
för att skapa ett File-objekt för filen ochjava.io.FileWriter
för att öppna enFileWriter
mot filen. - Skriv information: Använd
FileWriter
och metoder somwrite()
ochwriteLine()
för att skriva till filen. - Stäng filen: Stäng
FileWriter
efter skrivningen för att tömma buffertar och frigöra resurser.
Exempel på Filskrivning
import java.io.File;
import java.io.FileWriter;
public class SkrivFil {
public static void main(String[] args) {
try {
// Öppna filen
File file = new File("fil.txt");
FileWriter fileWriter = new FileWriter(file);
// Skriv data till filen
fileWriter.write("Detta är en testrad");
fileWriter.write("Detta är en annan testrad" + System.lineSeparator());
// Stäng filen
fileWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Filhantering
Java IO-hantering ger även klasser för att manipulera filer och kataloger:
java.io.File
: Representerar en fil eller mapp i filsystemet.java.io.FileFilter
: Ett gränssnitt för att filtrera filer och kataloger.java.io.FilenameFilter
: Ett gränssnitt för att filtrera filnamn.java.nio.file.Files
: En verktygslåda för att hantera filer och kataloger.
Exempel på Filmanipulation
import java.io.File;
import java.io.FileFilter;
public class FilHantering {
public static void main(String[] args) {
// Lista alla filer i en katalog
File dir = new File(".");
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
System.out.println(file.getName());
}
}
// Filtrera filer efter namn
FileFilter filter = new FileFilter() {
@Override
public boolean accept(File file) {
return file.getName().endsWith(".txt");
}
};
files = dir.listFiles(filter);
if(files != null) {
for (File file : files) {
System.out.println(file.getName());
}
}
}
}
Strömmar
Strömmar är en central del av Java IO-hantering. De ger ett abstrakt lager för att läsa och skriva data från olika källor. Java IO-biblioteket tillhandahåller dessa strömtyper:
- Byteströmmar: För att hantera råa bytes.
- Teckenströmmar: För att hantera tecken.
- Objektströmmar: För att hantera Java-objekt.
Exempel på Strömmar
Byteströmmar:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStröm {
public static void main(String[] args) {
try {
// Läs en fil
FileInputStream fis = new FileInputStream("fil.txt");
byte[] data = fis.readAllBytes();
fis.close();
// Skriv till en fil
FileOutputStream fos = new FileOutputStream("nyfil.txt");
fos.write(data);
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Teckenströmmar:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class TeckenStröm {
public static void main(String[] args) {
try {
// Läs en fil
FileReader fr = new FileReader("fil.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
fr.close();
// Skriv till en fil
FileWriter fw = new FileWriter("nyfil.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("Detta är en testrad");
bw.newLine();
bw.write("Detta är en annan testrad");
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Objektströmmar:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.IOException;
public class ObjektStröm {
public static void main(String[] args) {
try {
// Serialisera ett objekt
Person person = new Person("John", "Doe");
FileOutputStream fos = new FileOutputStream("person.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(person);
oos.close();
fos.close();
// Deserialisera ett objekt
FileInputStream fis = new FileInputStream("person.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
Person person2 = (Person) ois.readObject();
ois.close();
fis.close();
// Använd person2 här
System.out.println(person2);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public static class Person implements Serializable {
private String förnamn;
private String efternamn;
public Person(String förnamn, String efternamn) {
this.förnamn = förnamn;
this.efternamn = efternamn;
}
@Override
public String toString() {
return "Namn: "+ förnamn + " " + efternamn;
}
// Getters och setters
}
}
Sammanfattning
Java IO-hantering erbjuder en kraftfull uppsättning klasser och gränssnitt för att hantera in- och utdata. Genom att förstå hur man läser, skriver, lagrar och manipulerar data kan Java-utvecklare skapa robusta och effektiva applikationer som interagerar på ett pålitligt sätt med olika datakällor. Java IO-hantering är centralt för Java-utveckling och kan användas för många uppgifter, från att hantera enkla textfiler till att hantera komplexa datastrukturer och objekt.
Vanliga Frågor
- Vad är skillnaden mellan läsare och skrivare i Java IO?
Läsare används för att läsa data, medan skrivare används för att skriva data.
- Hur hanteras mappar i Java IO?
Mappar hanteras via
java.io.File
ochjava.nio.file
.