输入流(Output Stream):程序向输出流写入数据
数据流分类:
1.字节流:数据流中最小的数据单元是字节
2.字符流:数据流中最小的数据单元是字符,(java中的字符是Unicode编码,一个字符占2个字节。)但是字符流只能复制文本文件,字节流可以复制所有文件,包括图片、音乐等。
输入流的一些方法:
read(): 从输入流中读取数据的下一个字节,返回0~255范围内的int字节值。如果已到达流末尾而没有可用的字节,则返回-1;
read(byte[] b):从输入流中读入一定长度的字节,并以整数的形式返回字节数;
mark(int readlimit):在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数;
reset()方法:将输入指针返回到当前所做的标记处;
skip(long n)方法:跳过输入流上的n个字节并返回实际跳过的字节数;
markSupported()方法:如果当前流支持mark()/reset()操作就返回True;
close():关闭此输入流并释放与该流关联的所有系统资源。
输出流的所有方法都返回void,:
write(int b):将指定的字节写入此输出流;
write(byte[] b):将b个字节从指定的byte数组写入此输出流;
write(byte[] b,int off,int len):将指定的byte数组中偏移量off开始的len个字节写入此输出流;
flush():彻底完成输出并清空缓存区;
close():关闭输出流;
package com.java.IO;
import java.io.*;
public class FileTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file=new File("word.txt");//创建文件对象
if(file.exists()){//如果该文件存在
file.delete();//将文件删除
}
else{//如果文件不存在
try {
file.createNewFile();//创建该文件
System.out.println("文件已创建");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
方法 | 返回值 | 说明 |
getName() | String | 获取文件的名称 |
canRead() | boolean | 判断文件是否是可读的 |
canWrite() | boolean | 判断文件是否可被写入 |
exits() | boolean | 判断文件是否存在 |
length() | long | 获取文件的长度(以字节为单位) |
getAbsolutePath() | String | 获取文件的绝对路径 |
getParent() | String | 获取文件的父路径 |
isFile() | boolean | 判断文件是否存在 |
isDirectory() | boolean | 判断文件是否是一个目录 |
isHidden() | boolean | 判断文件是否是隐藏文件 |
IsModified() | long | 获取文件最后修改时间 |
package com.java.IO;
import java.io.*;
public class num_1 {
public static void main(String[] args) throws Exception{
//字符流
//FileReader wj=new FileReader("C:/Users/Administrator/workspace/java-1-10/src/com/java/IO/num_1.java");
//字节流
FileInputStream wj=new FileInputStream("C:/Users/Administrator/workspace/java-1-10/src/com/java/IO/num_1.java");
//读取当前文件
int aa;//这里必须定义成整形,java规定read()函数的返回值是整形
aa=wj.read();//读取一个字符
System.out.println("文件内容为:");
while(aa!=(-1)){//ASCII码是从0开始的数字,只有什么都没有才会返回-1
System.out.print((char)aa);
aa=wj.read();
}
wj.close();
}
}
package com.java.IO;
import java.io.*;
public class Fileread {
public static void main(String[] args) throws Exception {
FileInputStream fz=new FileInputStream("C:/Users/Administrator/Pictures/微博/1.jpg");//java里路径必须用"/",和windows的路径相反
FileOutputStream zt=new FileOutputStream("F:/1.jpg");
int aa;
aa=fz.read();
while(aa!=-1){
zt.write(aa);
aa=fz.read();
}
zt.flush();//将流中残留内同全部输出,卸载文件关闭之前
fz.close();
zt.close();
}
}
package com.java.IO;
import java.io.*;
public class Buffered {
public static void main(String[] args) throws Exception {
BufferedInputStream hcfz=new BufferedInputStream(new FileInputStream("F:/大.txt"));
BufferedOutputStream hczt=new BufferedOutputStream(new FileOutputStream("F:/xiao.txt"));
byte[] hc=new byte[2048];//数字就是缓冲区大小,单位是字节
int ff;
ff=hcfz.read(hc);
while(ff!=-1){
hczt.write(hc,0,ff);//为了防止最后一次写入数据长度与缓冲区不同
ff=hcfz.read(hc);
}
hczt.flush();
hczt.close();
hcfz.close();
//通过帮助文档,学习使用缓冲字符流,用于拷贝比较大的文本;
}
}
package com.java.IO;
import java.io.*;
public class zhuanhuan {
public static void main(String[] args) {
String zfc=null;
try {
BufferedReader zhl=new BufferedReader(new InputStreamReader(System.in));
//这个类就是一个包装类,它可以包装字符流,将字符流放入缓存中,先把字符读到缓存里,缓存满了或者flush时,再读入内存
zfc=zhl.readLine();
System.out.println("字符串是: "+zfc);
} catch (Exception e) {
// TODO: handle exception
}
}//system.in是字节流,想要转换成字符流就得用上面的方法
}//转换流是将java不允许的情况变成可能
package com.java.IO;
import java.io.*;
public class kongString {
public static void main(String[] args) throws Exception {
String zfc="111111111";
System.out.println("字符串是:"+zfc);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
zfc=br.readLine();//如果直接输入回车的话,字符串就是一个空字符串,开辟了空间,其值为空
System.out.println("-----------------");
System.out.println(zfc+"aaaaaa");
System.out.println(zfc.equals(""));
System.out.println(zfc.equals(null));
}
}
package com.java.IO;
import java.io.*;
public class Data {
public static void main(String[] args) throws Exception {
DataOutputStream sjl=new DataOutputStream(new FileOutputStream("f:/大.txt"));
sjl.writeLong(12345);
sjl.close();
System.out.println(12345);
System.out.printf("%#x\n",12345);//转换成16进制
//PrintStream pl=new PrintStream(new FileOutputStream("f:/大.txt"));
//pl.print(12345);
//pl.close();
}
}//DataOutputStream中的writeLong(data)方法的结果是计算机识别的二进制形式
//PrintStream中的println(data)方法的结果是以人们习惯看到的字符串形式
package com.java.IO;
import java.io.*;
import java.util.*;
public class Print {
public static void main(String[] args) {
PrintStream plzq=null;
PrintStream plcw=null;
Scanner ss=null;
try {//try要从创建流对象开始一直到最后
plzq=new PrintStream("f:/大.txt");
plcw=new PrintStream("f:/小.txt");
ss=new Scanner(System.in);
int shuzi;
System.setOut(plzq);//是输出到什么位置
System.setErr(plcw);//专门用来输出错误的
while(true){
shuzi=ss.nextInt();
System.out.println(shuzi);
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
package com.java.IO;
import java.io.*;
public class Object {
static class Student implements Serializable{//接口是空的,起到的是标志作用
String xingming=null;
int xuehao=0;
transient float chengji=0;//transient的作用是忽略,外面传不进来数据
public Student(String xingming,int xuehao,float chengji){
this.xingming=xingming;
this.xuehao=xuehao;
this.chengji=chengji;
}
}
public static void main(String[] args) {
ObjectOutputStream osc=null;
ObjectInputStream osr=null;
Student ss=new Student("悟空",007,95.5f);
Student ss2=null;
try {
FileOutputStream wsc=new FileOutputStream("f:/大.txt");
osc=new ObjectOutputStream(wsc);
osc.writeObject(ss);
osr=new ObjectInputStream(new FileInputStream("f:/大.txt"));
ss2=(Student)osr.readObject();
//readObject()方法就是用于读取数据,并且要进行类型转换
System.out.println("姓名:"+ss2.xingming);
System.out.println("学号: "+ss2.xuehao);
System.out.println("成绩:"+ss2.chengji);
} catch (Exception e) {
// TODO: handle exception
System.out.println("出现错误");
}
finally {
try {
osc.close();
osr.close();
System.exit(-1);
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}