标签:返回 复数 err 二进制文件 而且 print 操作 lis 获得
file类指代的应该说是文件集,包含文件集中所有文件的信息,而不是内容.因此file类无法承担读取内容写入内容的任务
常用方法:
accept(File dir,String name)
;java.io.InputStream (implements java.io.Closeable)
java.io.OutputStream (implements java.io.Closeable, java.io.Flushable)
io库中输入输出的类全部继承于这两个类,继承于inputStream的类必然有read()
方法,outputStream则必然有write()
方法.
FilterInputStream和FilterOutputStream分别继承自inputStream和OutputStream,为其余的装饰器类提供基类
java.io.Writer (implements java.lang.Appendable, java.io.Closeable, java.io.Flushable)
java.io.Reader (implements java.io.Closeable, java.lang.Readable)
Reader和Writer提供兼容Unicode和面向字符的I/O功能
它并不继承inputStream或是outputstream 而是仅仅实现了dataInput和dataOutput接口,他是一个完全独立的类,从头开始编写其所有的方法.它支持对文件的随机访问读写,使用时使用第二个参数指示随机读(r)还是读写(rw),并不支持只写.使用seek()
移动文件指针.length()
判断文件最大尺寸.
可以使用FileInputReader,为了提高速度,进行缓冲,我们把fileInputReader的引用传递给bufferedReader,使用bufferedReader的readLine()
方法进行文件读取.
public static String read(String filename) throws IOException {
if (filename.equals(""))
filename = "C:\\renluxiang\\code\\java\\thinking in java\\java\\DirList3.java";
BufferedReader bufferedReader = new BufferedReader(new FileReader(filename));
StringBuilder sb = new StringBuilder();
String s;
while ((s = bufferedReader.readLine()) != null) {
sb.append(s + "\n");
}
bufferedReader.close();
return sb.toString();
}
StringReader可以用来读取内存中的数据,但是read()方法返回的是int,需要类型转换为char才能正确打印.
public static void main(String[] args) throws IOException {
StringReader stringReader = new StringReader(BufferedInputFile.read(""));
int i;
while ((i = stringReader.read()) != -1) {
System.out.print((char) i);
}
}
读取格式化数据,可以使用DatainputStream,这是面向字节的I/O类,要读取字节必须使用inputStream而不是Reader.使用readbyte()
时因为一次一个字节读取,因此无法以返回值检测是否结束,可以使用available()
方法获得还有多少字符以此判断输入结束.
但是available()
方法在不同的流下有不同的作用,因此要谨慎使用.
public static void main(String[] args) throws IOException {
DataInputStream in = new DataInputStream(new ByteArrayInputStream(BufferedInputFile.read("")
.getBytes()));
try {
while (in.available() != 0) {
System.out.print((char) in.readByte());
}
} catch (Exception e) {
System.err.println("end of stream");
}
}
要向文件中写入字符数据需要使用fileWriter,而为了性能考虑一般要再将它包装为bufferedWriter,然后在包装为别的writer子类
如下:
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file)));
// java se5加入了辅助构造器 所以可以这样写
// PrintWriter out = new PrintWriter(file);
为了可以输出供另一个流恢复的数据,需要dataOutputStream,并用DataInputStream回复.使用dataOutputstream和dataInputStream java会保证无论读和写的平台多么不同,都不会影响数据的回复.
而且有writeUTF()和readUTF()的支持,可以随意的将字符串与其他内容进行混合输出,因为字符串的长度存储在了字符串前两个字节中,可以保证字符串的原样读入
public static void main(String[] args) throws IOException {
DataOutputStream out = new DataOutputStream(new FileOutputStream("out\\data.txt"));
out.writeDouble(3.14);
out.writeUTF("任鲁翔");
out.close();
DataInputStream in = new DataInputStream(
new BufferedInputStream(
new FileInputStream("out\\data.txt")));
System.out.println(in.readDouble());
System.out.println(in.readUTF());
in.close();
}
使用RandomAccessFile对文件进行操作
public static void main(String[] args) throws IOException {
File demo = new File("out");
if (!demo.exists())
demo.mkdir();
File file = new File(demo, "raf.txt");
if (!file.exists())
file.createNewFile();
RandomAccessFile raf = new RandomAccessFile(file, "rw");
System.out.println(raf.getFilePointer());
raf.writeChars("a");
raf.writeChars("b");
System.out.println(raf.getFilePointer());
int i = 0x7fffffff;
raf.write(i >>> 24);
raf.write(i >>> 16);
raf.write(i >>> 8);
raf.write(i);
String s = "任鲁翔";
byte[] bytes = s.getBytes("UTF-8");
raf.write(bytes);
raf.seek(0);
byte[] buf = new byte[(int) raf.length()];
raf.read(buf);
System.out.println(buf.toString());
}
public static byte[] read(File bfile) throws IOException {
byte[] data = null;
BufferedInputStream bf = new BufferedInputStream(new FileInputStream(bfile));
try {
data = new byte[bf.available()];
bf.read(data);
} catch (IOException e) {
e.printStackTrace();
}finally {
bf.close();
}
return data;
}
System.out 和 System.err都已经被包装成了PrintStream,而system.in是一个并未被包装的InputStream.
如果要使用system.in则需要自己进行包装
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s;
while ((s=in.readLine())!=null&&s.length()!=0){
System.out.println(s);
}
}
System.out 是一个PrintStream , PrintStream是一个outputStream,printWriter有一个可以接受outputStream的构造器,所以可以把System.out转换为printWriter
public static void main(String[] args){
PrintWriter out = new PrintWriter(System.out,true);
out.print("sfslknjf");
out.flush();
}
System类提供了三个方法
public static void main(String[] args) throws IOException {
PrintStream console = System.out;
BufferedInputStream in = new BufferedInputStream(new FileInputStream("java\\Redirecting.java"));
PrintStream out = new PrintStream(new FileOutputStream("out\\out.dat"),true);
System.setIn(in);
System.setOut(out);
System.setErr(out);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s ;
while((s=br.readLine())!=null){
out.println(s);
}
out.close();
System.setOut(console);
}
标签:返回 复数 err 二进制文件 而且 print 操作 lis 获得
原文地址:http://www.cnblogs.com/renluxiang/p/369ad15482615a055b03896fce2015ab.html