Dobré ráno! Ako načítavať zo textového súboru znak po znaku?
Samozrejme, dá sa ultimátna kombinácia BufferedReader
a, FileReader
a kadečoho, ale to by sme sa museli zabávať s pretypovávaním int
u na char
(lebo read()
funguje na int
och).
Namiesto toho čít (cheat, pozn. prekl.)
java.util.Scanner
vie načítavať riadky, znaky, tokeny z reťazcov, InputStream
ov, súborov, čohokoľvek a to dokonca s podporou oddeľovača.
A keď dáme prázdny reťazec ako oddeľovač, zrazu vieme čítať po znakoch.
Lebo každý znak je oddelený od nasledovného ničím.
File file = new File("input.txt");
Scanner scanner = null;
try {
scanner = new Scanner(file)
.withDelimiter("");
while(scanner.hasNext()) {
String token = scanner.next();
char c = token.charAt(0);
System.out.println(c);
}
} finally {
if(scanner != null) {
scanner.close();
}
}
Alebo unit test!
import static org.junit.Assert.*;
import java.util.Scanner;
import org.junit.Test;
public class CharacterReadingScannerTest {
@Test
public void testReadCharByChar() throws Exception {
String input = "0123456789 ABCDEFGHIJKLM";
StringBuilder expected = new StringBuilder(input);
Scanner scanner = new Scanner(input).useDelimiter("");
StringBuilder buf = new StringBuilder();
while(scanner.hasNext()) {
String singleCharacter = scanner.next();
assertEquals(1, singleCharacter.length());
buf.append(singleCharacter);
}
assertEquals(expected, buf);
}
}
Na moje stavby hľaď, ty mocný a zúfaj si!