//字符流Write的简单使用
BufferedWriter bw=null;//创建BufferedWriter对象为空
FileOutputStream fos=null;//创建FileOutputStream对象为空
OutputStreamWriter ops=null;//创建转型对象
try {
fos=new FileOutputStream("d:/remake1.txt");//指定写的文件
ops=new OutputStreamWriter(fos,"UTF-8");//进行汉字的转换
bw= new BufferedWriter(ops);//给BufferedWriter重新定义对象
bw.write("第一次实验");//运用BufferedWriter类的方法进行写入
bw.write("\n严伟贱说的!!");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();//抛出异常
}finally {
try {
bw.close();
ops.close();
fos.close();//关闭字节流
} catch (IOException e) {
e.printStackTrace();//抛出关闭异常
}
}
一:创建对象的时候可以先创建BufferedWriter类,并且写出对其重新赋新对象的式子,根据式子需求再创建OutputStream类,在对OutputStream类ops中转型的格式一般为UTF-8,并且因为要输入有个转型的对象,所以定义FileOutputStream类,指定所写的文件名(如果文件一开始并不存在,需要加具体的路径)。从而一步步反推把三个式子补写完整,不会有所缺漏。
二:在调用write方法写入时需要注意加入双引号否则会冒红,并且换行时可以输入"\n"或者敲一段
bw.newLine();这样子就可以实行换行
三:在关闭流的时候需要先将bw关闭,将其他抢先关闭,程序无法进行会报错。
//字符流read的简单使用
public static void test2(){
BufferedReader br=null;//定义BufferedReader类对象为空
InputStreamReader isr=null;
FileInputStream fis=null;
try {
fis=new FileInputStream("d:/remake1.txt");
isr=new InputStreamReader(fis,"UTF-8");//将fis读的文件中的字体转型
br=new BufferedReader(isr);//重新定义
String content=null;//定义content为空
while ((content= br.readLine())!=null){//读出整行内容写入content,并且判断是否为空
System.out.println(content);//输出content
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fis.close();
isr.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符流read的使用跟writer差别不是特别大,写法也可以参照writer的写法。比较需要注意的就是定义一个空字符串,并且用循环语句将需要读的文件中的每一行循环导入空字符串中,最后进行打印。我自己在read最后结束流里面并没有发现颠倒顺序会报错
再往后就是reader与writer的结合使用,需要注意的是用writer写一个文件并且在同一方法中再次用reader读该文件时,需要将writer的字节流在reader前结束,否则reader无法读该文件,流已经被占用了,无法进行。
public static void test4(){
BufferedReader br=null;
InputStreamReader isr=null;
FileInputStream fis=null;
try {
fis=new FileInputStream("d:/remake2.txt");
isr=new InputStreamReader(fis,"UTF-8");
br=new BufferedReader(isr);
StringBuffer stringBuffer=new StringBuffer();
String content=null;
while ((content= br.readLine())!=null){
System.out.println(content);
stringBuffer.append(content);
}
String stu=stringBuffer.toString();
stu = stu.replace("贱", "健");
System.out.println(stu);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {br.close();
isr.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
此段代码是writer一个新文件,并且在文件中写入一些内容。然后用reader读该文件,将其读入空字符串。如果想要替换一些内容,需要在循环之前定义一个StringBuffer类的对象,在循环中用StringBuffer的append方法在每次循环时向StringBuffer类的对象中加入每一行内容,然后将StringBuffer对象转成String类型,最后使用String的replace方法将需要替换的地方替换掉。(当然也可以不转换成String类型直接进行内容替换
//对一个图片进行在其他盘中的复制转移
DataInputStream dis=null;
FileInputStream fis=null;//定义输入对象
DataOutputStream dos=null;//定义数据输出流的对象
FileOutputStream fos=null;//定义输出对象
try {
fis=new FileInputStream("./resource/pede.jpg");//给定位置
dis=new DataInputStream(fis);//转换成二进制数据类型
fos=new FileOutputStream("pedecopy.jpg");//给定需要复制到的地方
dos=new DataOutputStream(fos);//再次转成文件输出
int temp=-1;
while ((temp=dis.read())!=-1){
dos.write(temp);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
dos.close();
dis.close();
fos.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
DataOutputStreams是数据输出流,实现八种基本类型数据的输出,该方法很便捷方便·,可以将一个盘中的大型文件很快的拷到其他地方。
未完成的结构图