java/ch/wlkl/wsh/FileRW.java
package ch.wlkl.wsh;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileRW extends Top implements Read<String>, Write<String> {
private BufferedWriter writer = null;
private BufferedReader reader = null;
private String filename = null;
public FileRW () {
}
public FileRW (String fn) {
reset(fn);
}
public void reset(String fn) {
close();
filename = fn;
if (fn.charAt(0) == Cat.eExtFD)
sFail("reset(" + fn + ") external FD not supported");
}
public void reset(Object... o) {
if (o.length != 1)
fail("reset with " + o.length + " args instead of 1");
else if (! (o[0] instanceof String))
fail("reset(" + o[0] + ") arg not String");
reset((String) o[0]);
}
public void open(String opt) {
boolean app = false;
close();
if (opt.indexOf('r') >= 0) {
reader = fileReader(filename);
} else if (opt.indexOf('w') >= 0 || (app = opt.indexOf('a') >= 0)) {
writer = fileWriter(filename, app);
} else {
fail("bad opt for open(" + opt + ")");
}
}
public void close() {
try {
if (writer != null) {
writer.close();
writer = null;
say("??? fileRW closed wri " + new File(filename).getAbsolutePath());
}
if (reader != null) {
reader.close();
reader = null;
say("??? fileRW closed rea " + filename);
}
} catch (IOException e) {
fail("close of " + filename + " caught " + e);
}
}
public String read() {
try {
return reader.readLine();
} catch (IOException e) {
fail("write read " + filename + " caught " + e);
return null;
}
}
public void write(String data) {
try {
writer.write(data);
writer.newLine();
} catch (Exception ex) {
fail("write on " + filename + " caught " + ex);
}
}
public void writeAll(String opt, Read<String> r) {
Cat.writeAll(this, opt, r);
}
static public BufferedReader fileReader(String fileName) {
try {
return new BufferedReader(new FileReader(fileName));
} catch (FileNotFoundException e) {
sFail("fileReader open " + fileName + " caught " + e);
return null;
}
}
static public BufferedWriter fileWriter(String fileName, boolean app) {
try {
return new BufferedWriter(new FileWriter(fileName, app));
} catch (Exception ex) {
try {
new File(fileName).getParentFile().mkdirs();
return new BufferedWriter(new FileWriter(fileName, app));
} catch (Exception e2) {
Top.sFail("fileWriter open(" + fileName + ") caught " + ex + " and after mkdirs " + e2);
return null;
}
}
}
}