Я хотел бы прочитать в файле и заменить текст новым текстом. Было бы просто использовать asm и int 21h, но я хочу использовать новые потоки java 8.
Files.write(outf.toPath(),
(Iterable<String>)Files.lines(inf)::iterator,
CREATE, WRITE, TRUNCATE_EXISTING);
Где-то там я бы хотел lines.replace("/*replace me*/","new Code()\n");
. Новые строки связаны с тем, что я хочу проверить, где где-то вставлять блок кода.
Вот пример игры, который не работает, как я хочу, но компилируется. Мне просто нужно перехватить строки из итератора и заменить определенные фразы блоками кода.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import static java.nio.file.StandardOpenOption.*;
import java.util.Arrays;
import java.util.stream.Stream;
public class FileStreamTest {
public static void main(String[] args) {
String[] ss = new String[]{"hi","pls","help","me"};
Stream<String> stream = Arrays.stream(ss);
try {
Files.write(Paths.get("tmp.txt"),
(Iterable<String>)stream::iterator,
CREATE, WRITE, TRUNCATE_EXISTING);
} catch (IOException ex) {}
//// I'd like to hook this next part into Files.write part./////
//reset stream
stream = Arrays.stream(ss);
Iterable<String> it = stream::iterator;
//I'd like to replace some text before writing to the file
for (String s : it){
System.out.println(s.replace("me", "my\nreal\nname"));
}
}
}
edit: Я получил это далеко, и он работает. Я пытался с фильтром и, возможно, это действительно не нужно.
Files.write(Paths.get("tmp.txt"),
(Iterable<String>)(stream.map((s) -> {
return s.replace("me", "my\nreal\nname");
}))::iterator,
CREATE, WRITE, TRUNCATE_EXISTING);