I/O Flashcards

1
Q

Welke classes vallen er onder de Reader API

A
  • FileReader
  • StringReader
  • CharArrayReader
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Hoe maak ik een nieuwe referentie van een bestand aan?

A

File file = new File("map/naar/bestand.txt");

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Stel, we hebben een file object:
File file = new File("map/naar/bestand.txt");.
Hoe checken we of dit bestand bestaat? (geef beide opties)

A

file.exists(); // returnt boolean
of
Files.exists(file.toPath());

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Stel, we hebben een file object:
File file = new File("map/naar/bestand.txt");.
Hoe checken we of dit een bestand of map is? (geef beide opties)

A

file.isDirectory(); // returnt boolean
of
Files.isDirectory(file.toPath());

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

hoe maak ik een bestand aan? (geef beide opties)

A
  1. Maak eerst een file object aan:
    File file = new File("map/naar/bestand.txt");
  2. file.createNewFile(); // returnt boolean

let op dat dit alleen werkt als de map/naar map beschikbaar is.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

hoe maak ik een map(directory) aan? (geef beide opties)

A
  1. Maak eerst een file object aan:
    File dir = new File("map/naar");
  2. dir.mkdir(); // returnt boolean
    of
    Files.createDirectory(dir.toPath());

let op dat dit alleen werkt als de map map beschikbaar is. Is dit niet het geval dan wordt er simpelweg false gereturnd en gebeurt er niets.
Als je wil dat alle nog niet bestaande mappen aangemaakt worden, kun je mkdirs gebruiken.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Stel ik heb een file object:
File file = new File("path/to/file/file.txt");
wat is het verschil tussen file.mkdir en file.mkdirs? Wat is het resultaat in beide gevallen (aangenomen dat alle mappen nog niet bestaan).

A

mkdir maakt enkel de map file.txt aan wanneer path/to/file al bestaat. Gezien dit niet het geval is returnt mkdir false en gebeurt er niets.

mkdirs maakt de map file.txt en alle nog niet bestaande parent mappen aan.

let op: er worden in beide gevallen geen bestanden aangemaakt. file.txt wordt als map gezien.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Stel ik heb een file object:
File file = new File("path/to/file/file.txt");

Hoe kan ik het absolute pad van deze file ophalen?

A

met file.getAbsolutePath();

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Stel ik heb een file object:
File file = new File("path/to/file/../file/file.txt");

Wat is hier het verschil tussen file.getAbsolutePath() en file.getCanonicalPath()?

A

getAbsolutePath doet geen conversie en zal dus bijvoorbeeld C:/code/javaproj/path/to/file/../file/file.txt teruggeven.

getCanonicalPath doet de conversie van de ../ wel en geeft daarom C:/code/javaproj/path/to/file/file.txt terug.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Beschouw deze code:
~~~
Path pathOne = Paths.get(“/animals/tiger”);
Path pathTwo = Paths.get(“animals/lion”);

System.out.println(pathOne.resolve(pathTwo));
~~~
Wat wordt er geprint?

A

/animals/tiger/animals/lion
Wanneer een absoluut pad in een relatief pad word geresoved, worden de paden simpelweg achter elkaar geplakt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Beschouw deze code:
~~~
Path pathOne = Paths.get(“/animals/tiger”);
Path pathTwo = Paths.get(“animals/lion”);

System.out.println(pathTwo.resolve(pathOne));
~~~
Wat wordt er geprint?

A

/animals/tiger
Wanneer een relatief pad in een absoluut pad word geresoved, wordt het relatieve pad genegeerd en het absolute pad teruggegeven.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Beschouw deze code:
~~~
Path pathOne = Paths.get(“animals/lion”);
Path pathTwo = Paths.get(“animals/zebra”);

System.out.println(pathOne.resolve(pathTwo));
~~~
Wat wordt er geprint?

A

animals/lion/animals/zebra.
Resolve met twee relatieve paden zorgt ervoor dat ze simpelweg achter elkaar worden geplakt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Beschouw deze code:
~~~
Path pathOne = Paths.get(“/animals/tiger”);
Path pathTwo = Paths.get(“/animals/giraffe”);

System.out.println(pathOne.resolve(pathTwo));
~~~
Wat wordt er geprint?

A

/animals/giraffe
Wanneer resolve wordt uitgevoerd op twee absolute paden dan wordt het pad dat als parameter wordt meegegeven als leidend beschouwd.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Beschouw deze code:
~~~
Path path3 = Paths.get(“E:\habitat”);
Path path4 = Paths.get(“E:\sanctuary\raven\poe.txt”);

System.out.println(path3.relativize(path4));
System.out.println(path4.relativize(path3));
~~~

Wat wordt er geprint?

A

..\sanctuary\raven\poe.txt
en
..\..\..\habitat
Relativize geeft instructies om van pad a naar pad b te komen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Beschouw deze code:
~~~
var p2 = Path.of(“/cats/../panther/food/”);
System.out.println(p2.normalize());
~~~

Wat is het resultaat?

A

panther/food.
normalize zorgt ervoor dat alle ../ elementen eruit worden gehaald en een eenvoudig leesbaar pad overblijft. Ook de laatste / wordt weggehaald.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Beschouw deze code:
~~~
Path pathOne = Paths.get(“animals/lion”);
Path pathTwo = Paths.get(“c:/animals/zebra”);

System.out.println(pathOne.relativize(pathTwo));
~~~
Wat wordt er geprint?

A

Niets, dit geeft een error (IllegalArgumentException).

Relativize vereist dat beide paden relatief of absoluut zijn. Relatieve en absolute paden kunnen niet met elkaar gerelativeerd worden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Hoe maak ik een referentie naar een bestand dat ik uit wil lezen?

A

met FileReader.

Bijvoorbeeld:
~~~
Reader reader = new FileReader(“path/to/myFile.txt”);
~~~

let op: new FileReader gooit een FileNotFoundException dus zorg ervoor dat deze, of IOException wordt afgevangen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q
Reader reader = 
    new FileReader("path/to/myFile.txt");

Stel ik wil reader.read() doen. Wat voor parameters worden er verwacht? En wat returnt het?

A

Het vraagt een character array (dus char[]).
Het returnt het aantal karakters dat gelezen is.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Hoe kan ik met FileReader een bestand uitlezen?

A
Reader reader = new FileReader("files/myFile.txt");

char[] buf = new char[1];
StringBuilder sb = new StringBuilder();

int read = reader.read(buf);
while (read > 0) {
    sb.append(buf, 0, read);
    read = reader.read(buf);
}
System.out.println(sb);

let er wel op om reader te closen en een IOException of FileNotFoundException te gooien.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Hoe schrijf ik met fileWriter naar een bestand?

A

Bijvoorbeeld zo:
~~~
try (Writer w = new FileWriter(“files/newFile.txt”)) {
w.write(“Nieuw bestand.”);
} catch (IOException e) {
e.printStackTrace();
}
~~~

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Hoe werkt BufferedWriter en hoe verschilt het van de ‘standaard’ FileWriter.

A

Bijvoorbeeld zo:
~~~
try (Writer w = new FileWriter(“files/newFile.txt”)) {
BufferedWriter bufferedWriter = new BufferedWriter(w);
bufferedWriter.write(“Tekst wegschrijven met BW”);
bufferedWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}
~~~
BufferedWriter voorkomt dat er vele kleine schrijf acties moeten worden gedaan. Met .flush() wordt in 1 keer alles naar de file weggeschreven.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Beschouw deze code:
~~~
try (Writer w = new FileWriter(“files/newFile.txt”)) {
BufferedWriter bufferedWriter = new BufferedWriter(w);
bufferedWriter.write(“Tekst wegschrijven met BW”);
} catch (IOException e) {
e.printStackTrace();
}
~~~

Wat is de inhoud van newFile.txt?

A

Niets. Het bestand is leeg. BufferedWriter heeft de flush() method nodig om ook daadwerkelijk wat te schrijven naar het bestand. dus:

try (Writer w = new FileWriter("files/newFile.txt")) {
    BufferedWriter bufferedWriter = new BufferedWriter(w);
    bufferedWriter.write("Tekst wegschrijven met BW");
    bufferedWriter.flush();
} catch (IOException e) {
    e.printStackTrace();
}
23
Q

Wat doet de volgende code:
~~~
File parent = new File(“/home/tiger”);
File zooFile3 = new File(parent, “data/stripes.txt”);
~~~

A

Maakt een File Object dat refereert naar /home/tiger/data/stripes.txt.
new File kan meerdere opeenvolgende string en file objecten bevatten.

24
Q

Hoe maak ik een nieuw Path Object aan?

A

Path foo = Path.of("path/file.txt"); of
Path foo = Paths.get("path/file.txt");

25
Q

Hoe zet ik een path om naar een file?

A
Path path = Path.of("path/file.txt");
File myFile = path.toFile();
26
Q

Hoe zet ik een file om naar een path?

A
File myFile = new File("path/file.txt");
Path myPath = file.toPath();
27
Q

Hoe geef ik weer welke bestanden er in een map zitten?

A
File directory = new File("path/to/file.txt");
File[] files = directory.listFiles();
28
Q

Hoe kan ik in de console data invoeren?

A
Console console = System.console();
String name = console.readLine();
System.out.println("Hallo " + name);
29
Q

Hoe maak ik een nieuw Path object aan?

A

Path myPath = Path.of("/my/directory");
of
Path myPath = Paths.get("/my/directory");
Let erop dat Path een interface is en we dus niet new Path("my/directory") kunnen zeggen.

30
Q

Stel ik heb een file object:
File file = new File("path/to/file/file.txt");
Hoe haal ik de grootte van het bestand op (in bytes)? (geef beide opties)

A

file.length();
of
Files.size(file.toPath());

31
Q

Stel ik heb een file object:
File file = new File("path/to/directory");
Hoe maak ik de map directory aan, en alle bovenliggende mappen die eventueel missen? (geef beide opties)

A

file.mkdirs();
of
Files.createDirectories(file.toPath());

32
Q

Hoe kopieer ik een Path(bestand of map) naar een nieuwe bestemming?

A
Path source = Paths.of("my/source/file.txt");
Path destination = Paths.of("the/destination/file.txt");
Files.copy(source, destination);

Let erop dat dit alleen werkt wanneer the/destination al bestaat. Bestaat dit niet, dan worden er ook geen bestanden gekopieerd.

33
Q

De volgende code kopieert een bestand van a naar b:
~~~
Path source = Paths.of(“my/source/file.txt”);
Path destination = Paths.of(“the/destination/file.txt”);
Files.copy(source, destination);
~~~
Hoe zorg ik ervoor dat file.txt wordt overschreven wanneer deze al bestaat?

A

`
Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING);
`

34
Q

De volgende code kopieert een bestand van a naar b:
~~~
Path source = Paths.of(“my/source/file.txt”);
Path destination = Paths.of(“the/destination/file.txt”);
Files.copy(source, destination);
~~~
Wat gebeurt er als de destination file al bestaat?

A

Er wordt een exception gegooid.
Dit kan voorkomen worden door in Files.copy ook een StandardCopyOption.REPLACE_EXISTING parameter mee te geven.

35
Q

beschouw deze code:
~~~
var file = Paths.get(“food.txt”);
var directory = Paths.get(“/enclosure”);
Files.copy(file, directory);
~~~
wat is het resultaat?

A

Een Exception. De applicatie probeert een bestand aan te maken dat /enclosure heet. Gezien er al een map bestaat met deze naam kan het niet.
~~~
var file = Paths.get(“food.txt”);
var directory = Paths.get(“/enclosure/food.txt”);
Files.copy(file, directory);
~~~
Dit zou het bestand in de enclosure map kopieren. Er vanuit gaande dat de map enclosure al bestaat.

36
Q

Stel, ik heb twee paths:
~~~
Path from = Paths.get(“food.txt”);
Path to = Paths.get(“/enclosure/food.txt”);
~~~
Hoe verplaats ik het bestand food.txt naar de enclosure map?

A

met Files.move(from, to);.

37
Q

Beschouw deze code:
~~~
Files.move(
Path.of(“mouse.txt”),
Path.of(“gerbil.txt”),
StandardCopyOption.ATOMIC_MOVE
);
~~~
Wat doet de atomic move?

A

Het zorgt ervoor dat het bestand alleen in zijn volledigheid van de oude naar de nieuwe locatie wordt verplaatst.
Grote bestanden worden stukje bij beetje naar de nieuwe locatie gestuurd; wat tot conflicten kan leiden. Atomic move voorkomt dit.

38
Q

Path mouse = Path.of("mouse.txt");
Hoe verwijder ik mouse alleen wanneer het bestand bestaat?

A

Files.deleteIfExists(mouse);

39
Q

Wat is het verschil tussen een low level I/O stream en een high level I/O stream?

Geef een voorbeeld van een low en high level I/O stream.

A

De low level stream spreekt de bron van de data waar je mee werkt (een bestand, string, array of wat dan ook) direct aan.

De high level stream is een laag om de low level heen. Dit kan voordelen hebben; bijvoorbeel in het kader van data incrementeel uitlezen en filteren.

Een voorbeeld van een low level I/O stream is FileReader:
new FileReader("zoo-data.txt");

Een voorbeeld van een high level I/O stream is BufferedReader:
new BufferedReader(new FileReader("zoo-data.txt"));

40
Q

Compileert de volgende code? Leg uit:
~~~
new BufferedInputStream(
new FileReader(“z.txt”)
);
~~~

A

Nee. De high level stream (BufferedInputStream) en low level input stream (FileReader) komen niet overeen. Als we in plaats van BufferedInputStream BufferedReader gebruiken werkt het wel.

41
Q

Compileert de volgende code? Leg uit:
~~~
new BufferedInputStream(
new InputStream()
);
~~~

A

Nee. InputStream is een Interface. Dus we moeten in plaats hiervan FileInputStream gebruiken.

42
Q

Wat doet FileInputStream? Is het een low of high level stream?

A

Leest data als bytes. Is een low level I/O stream.

43
Q

Wat doet FileOutputStream? Is het een low of high level stream?

A

Schrijft data weg als bytes. Is een low level stream

44
Q

Wat doet FileReader? Is het een low of high level stream?

A

Leest data uit als karakters (dus niet als bytes). Is een low level stream

45
Q

Wat doet FileWriter? Is het een low of high level stream?

A

Schrijft data weg als karakters (dus niet als bytes). Is een low level stream

46
Q

Wat doet BufferedInputStream? Is het een low of high level stream?

A

Leest byte data van een bestaande InputStream op gebufferde manier (bevordert performance). Is een high level stream

47
Q

Wat doet BufferedOutputStream? Is het een low of high level stream?

A

Schrijft byte data weg van een bestaande OutputStream op gebufferde manier (bevordert performance). Is een high level stream

48
Q

Wat doet BufferedReader? Is het een low of high level stream?

A

Leest character data van een bestaande Reader op gebufferde manier (bevordert performance). Is een high level stream

49
Q

Wat doet BufferedWriter? Is het een low of high level stream?

A

Schrijft character data weg van een bestaande Writer op gebufferde manier (bevordert performance). Is een high level stream

50
Q

Wat doet ObjectOutputStream? Is het een low of high level stream?

A

Serialiseert primitieve Java data types vanuit een bestaande OutputStream. Is high level.

51
Q

Wat doet ObjectInputStream? Is het een low of high level stream?

A

De-Serialiseert primitieve Java data types vanuit een bestaande InputStream. Is high level.

52
Q

Wat doet PrintStream? Is het een low of high level stream?

A

Schrijft java objecten naar binary stream. Is High level.

53
Q

Wat doet PrintWriter? Is het een low of high level stream?

A

Schrijft java objecten naar character stream. Is High level.