各种流的关系:
OutputStream—FileOutputStream(继承OutputStream)—BufferedOutputStream
InputStreamReader(转换流)-- BufferedReader—FileReader
inputStream
一、构造方法摘要
File(Fileparent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(Stringpathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(Stringparent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URIuri)
通过将给定的 file:URI 转换为一个抽象路径名来创建一个新的 File 实例。
File f1 = newFile("C:\\Users\\Administrator\\Desktop\\1.txt");
File f2=newFile(new File("C:\\Users\\Administrator\\Desktop"),"11.txt");
f1.createNewFile();
File f3=newFile("C:\\Users\\Administrator\\Desktop", "111.txt");
boolean b =f3.createNewFile();
System.out.println(b);
二、单级多目录与级目录创建
File f1=new File(Constant.PATH+"aa\\bb");
boolean b = f1.mkdir();//false创建单级目录
boolean c = f1.mkdirs();//true创建多级目录
System.out.println(b);
System.out.println(c);
三、文件及文件夹的删除
1、booleandelete()
删除此抽象路径名表示的文件或目录。
2、多级目录删除
四、文件的判断与获取功能
判断功能
public boolean isDirectory():判断是否是目录
public boolean isFile():判断是否是文件
public boolean exists():判断是否存在
获取功能
public String getAbsolutePath():获取绝对路径
public String getPath():获取相对路径
public String getName():获取名称
五、字节输入输出流
1、分类
按照类型分:
字节流
字符流:(字符流数据通过Windows自带的记事本软件打开是可以读懂里面内容的)
按照流向分:
输入流 : 用来读取数据的
输出流 : 用来写出数据的
2、outputstream抽象类(java.io包下)
此抽象类是表示字节输入流的所有类的超类。
.Fileoutputstream(子类)
Fileoutputstream写出数据的三个方法:
* publicvoid write(int b):一次写一个字节
* public void write(byte[] b):一次写一个字节数组
* public void write(byte[] b,int off,int len):一次写一个字节数组的一部分
String类中的方法
* byte[]getBytes() 将字符串转换为字节数组
FileOutputStreamfos=new FileOutputStream("1.txt");
//fos.write(100);
//fos.write("hello".getBytes());
fos.write("hello".getBytes(),0, 2);
fos.close();
3、换行
不同的操作系统,针对换行的符号识别是不一样的。
windows:\r\n
linux:\n
mac:\r
4、追加写入
FileOutputStream(Stringname, boolean append)
//如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处
5、读取文件
FileInputStream in= null;
try {
in = newFileInputStream("1.txt");
byte[]b = new byte[1024];
intlen;
while((len = in.read(b)) != -1) {
System.out.print(newString(b, 0, len));
System.out.println(len);
}
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
} finally{
try{
in.close();
} catch(IOException e) {
e.printStackTrace();
}
}
6、字节缓冲区流
构造方法摘要 :
BufferedOutputStream(OutputStreamout)
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
BufferedOutputStream(OutputStreamout, int size)
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的底层输出流
// 方式一只读一个字节
BufferedInputStream in = new BufferedInputStream(newFileInputStream("1.txt"));
// intread = in.read();
//System.out.println((char)read);
// 方式二每次读一个字节
// int b;
//while((b=in.read())!=-1){
//System.out.print((char)b);
// }
// 方式三一次读取一个字节数组
int len;
byte b[]= new byte[1024];
while((len = in.read(b)) != -1) {
System.out.print(newString(b, 0, len));
}
in.close();
*为什么字节缓冲流的构造方法需要传入一个OutputStream
字节缓冲区流仅仅提供缓冲区,而真正的底层的读写数据还得需要基本的流对象进行操作。
六、转换流
1、当读到汉字时,汉字是两个字节,一次读取一个字节识别不出汉字。
2、OutputStreamWriter
构造方法摘要 :
OutputStreamWriter(OutputStreamout)
创建使用默认字符编码的OutputStreamWriter。
OutputStreamWriter(OutputStreamout, Charset cs)
创建使用给定字符集的OutputStreamWriter。
OutputStreamWriter(OutputStreamout, CharsetEncoder enc)
创建使用给定字符集编码器的OutputStreamWriter。
OutputStreamWriter(OutputStreamout, String charsetName)
创建使用指定字符集的OutputStreamWriter。
例子:
OutputStreamWriter w = new OutputStreamWriter(newFileOutputStream("1.txt"), "utf-8");
w.write("中国");
w.close();
InputStreamReader r=new InputStreamReader(newFileInputStream("1.txt"),"utf-8");
int c;
while ((c= r.read())!=-1) {
System.out.print((char)c);
}
r.close();
2、成员方法
publicvoid write(int c):写一个字符
*public void write(char[] cbuf):写一个字符数组
*public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
*public void write(String str):写一个字符串
*public void write(String str,int off,int len):写一个字符串的一部分
例:
OutputStreamWriterw = new OutputStreamWriter(new FileOutputStream("1.txt"));
w.write("中国");
//w.flush();//文件中的数据存储的基本单位是字节,不刷新写不进去内容,close替代
w.close();//关闭此流,但要先刷新它
InputStreamReader:
构造方法摘要
InputStreamReader(InputStreamin)
创建一个使用默认字符集的 InputStreamReader。
InputStreamReader(InputStreamin, Charset cs)
创建使用给定字符集的 InputStreamReader。
InputStreamReader(InputStreamin, CharsetDecoder dec)
创建使用给定字符集解码器的 InputStreamReader。
InputStreamReader(InputStreamin, String charsetName)
创建使用指定字符集的 InputStreamReader。
它们是字符流:等于字符流加上编码
两种读取方式:
InputStreamReader r=new InputStreamReader(new FileInputStream("Test04.java"));
// int c;
// while((c=r.read())!=-1){
// System.out.print((char)c);
// }一次读取一个字符
int len;
char [] c=newchar[1024];
while((len=r.read(c))!=-1){
System.out.print(c);//一次读取一个字符数组
}
r.close();
七、FileRead,FileWirte
publicclass FileReader extends InputStreamReader
用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造InputStreamReader。
例、复制文件
FileReader r=newFileReader("TestTime.java");
FileWriter w=newFileWriter("1.txt");
char [] c=new char[1024];
int len;
while ((len=r.read(c))!=-1) {
w.write(c, 0, len);
}
r.close();
w.close();
七、BufferedWriter和 BufferedReader
public class BufferedWriter
extends Writer
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
1、复制文件
BufferedWriter w=new BufferedWriter(new FileWriter("哈哈.java"));
BufferedReaderr=new BufferedReader(new FileReader("1.txt"));
char[] c=newchar[1024];
int len;
while((len=r.read(c))!=-1){
w.write(c,0, len);
}
r.close();
w.close();
2、常用方法
(1)每次读取一行数据
BufferedReaderr=new BufferedReader(newFileReader("1.txt"));
String s;
while((s=r.readLine())!=null){
System.out.println(s);
}
(2)newLine() 写完换一行
BufferedWriter w=new BufferedWriter(new FileWriter("呵呵.java"));
for (inti = 0; i <100; i++) {
w.write(i+":");
w.write(i);
w.newLine();//写完换一行
}
w.close();
一、properties属性集合类的使用
1、 可以作为map集合使用
Properties p=newProperties();
p.put("name","小明");
p.put("age",20);
Set<Object> keySet =p.keySet();
for (Object key : keySet){
Object object = p.get(key);
System.out.println(object);
}
2、properties的特殊方法实现
Propertiesp=new Properties();
p.setProperty("小明", "22");
p.setProperty("小红", "23");
p.setProperty("小丽", "25");
Set<String>names = p.stringPropertyNames();
for (Stringkey : names) {
Stringvalue = p.getProperty(key);
System.out.println(key+":"+value);
}
2、 load和store方法
Properties p=new Properties();
// p.load(newFileReader("pro.txt"));
// System.out.println(p);
p.setProperty("郭佳", "18");
p.store(new FileWriter("a.txt"),"郭佳");
3、修改文件的值
FileReader r=newFileReader("a.txt");
Propertiesp=new Properties();
p.load(r);
Set<String>keys = p.stringPropertyNames();
for (Strings : keys) {
Stringvalue = p.getProperty(s);
if("郭佳".equals(s)) {
p.setProperty(s,"200");
break;
}
}
FileWriterw=new FileWriter("a.txt");
p.store(w, null);//必须重新存储
r.close();
w.close();
七、其他IO流
1、LineNumberReader
LineNumberReader l=newLineNumberReader(new FileReader("line.java"));
FileWriterw=new FileWriter("copyline.txt");
Stringline = null;
while((line=l.readLine())!=null) {
w.write(l.getLineNumber()+""+line);
w.write("\r\n");
}
w.close();
l.close();
LineNumberReader l=newLineNumberReader(new FileReader("line.java"));
FileWriterw=new FileWriter("copyline.txt");
BufferedWriterbw=new BufferedWriter(w);
Stringline = null;
while((line=l.readLine())!=null) {
bw.write(l.getLineNumber()+""+line);
bw.newLine();
}
bw.close();
l.close();
2、ObjectOutputStream和ObjectInputStream
ObjectOutputStream out=new ObjectOutputStream(newFileOutputStream("object.txt"));
out.writeObject(newStudent("郭佳", 22, 100));
ObjectInputStreamin = new ObjectInputStream(new FileInputStream("object.txt"));
Objectobject = in.readObject();
System.out.println(object);
out.close();
in.close();
*Student要实现implements Serializable 接口