I/O流
程序员文章站
2024-03-04 20:57:42
...
常用方法:
1、exists();//判断File类的对象所表示文件或文件夹,是否存在
2、boolean isFile()
测试此抽象路径名表示的文件是否为普通文件
3、boolean isDirectory()
测试此抽象路径名表示的文件是否为目录。
4、boolean isAbsolute()
测试这个抽象路径名是否是绝对的。
5、String getName()
返回由此抽象路径名表示的文件或目录的名称。
6、String getPath()
将此抽象路径名转换为路径名字符串。
7、String getAbsolutePath()
返回此抽象路径名的绝对路径名字符串。
8、File getAbsoluteFile()
返回此抽象路径名的绝对形式。
9、String getParent()
返回此抽象路径名的父 null的路径名字符串,如果此路径名未命名为父目录,则返回null。
10、File getParentFile()
返回此抽象路径名的父,或抽象路径名 null如果此路径名没有指定父目录。
11、long length()
返回由此抽象路径名表示的文件的长度。 以字节为单位。
bit:位,0,1
byte:字节,8个bit。
kb:1024个字节
mb:
12、long lastModified()
返回此抽象路径名表示的文件上次修改的时间。
File f1 = new File("C:\\Ruby\\pro\\aa.jpg");//创建一个File类的对象,但是该文件对象所对应的目录文件,不一定存在。
IO流的4大基类
InputStream字节输入流
OutputStream字节输出流
Reader字符输入流
Writer字符输出流
转换流
转换流:输入:InputStreamReader,继承了Reader,读取
转换流:输出:OutputStreamWriter,继承了Writer,写出
构造方法:
InputStreamReader(InputStream);//读取字符为单位的数据
OutputStreamWriter(OutputStream);//写出字符为单位的数据
InputStreamReader(InputStream,“编码集”);//读取字符为单位的数据
OutputStreamWriter(OutputStream,“编码集”);//写出字符为单位的数据
A、4大基类流
InputStream
OutputSteam
Reader
Writer
B:文件流
FileInputStream
FileOutputStream
FileReader
FileWriter
C、缓存流
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
D、对象流
ObjectInputStream
ObjectOutputStream
E:转换流:
InputStreamReader
OutputStreamWriter
转换单位:字节-字符之间的桥梁
指明编码
字节流
/*
* 读文件,将一个音频文件读入到程序中。统计读取的是字节数量。统计耗时。
方法一:read()-->一个字节读,
方法二:read(byte[] )-->缓冲区的读
*/
public class HomeWork1 {
public static void main(String[] args) throws IOException {
long sy = System.currentTimeMillis();
FileInputStream fis=new FileInputStream("D:\\千峰培训\\pro\\I_Do_It_For_You.mp3");
int data = 0;
int sum=0;
while((data=fis.read())!=-1){
sum+=data;
}
System.out.println("音频文件字节数量为:"+sum);
if(fis!= null){
fis.close();
}
long sy1 = System.currentTimeMillis();
System.out.println(sy1-sy+"毫秒");
// long ll = System.currentTimeMillis();
// byte[] by=new byte[1024];
// int data = 0;
// int sum=0;
// while((data=fis.read(by))!=-1){
// sum+=data;
//
// }
// System.out.println("音频文件字节数量为:"+sum);
// if(fis!= null){
// fis.close();
// }
// long ll1 = System.currentTimeMillis();
// System.out.println(ll1-ll+"毫秒");
}
}
文件拷贝
public static void main(String[] args) throws IOException, Exception {
//long ss = System.currentTimeMillis();
FileInputStream fis=new FileInputStream("D:\\pro\\apologize.mp3");
FileOutputStream fos=new FileOutputStream("D:\\pro\\aa\\apologize.mp3");
byte[] y =new byte[1024*1024];
int b=0;
while((b=fis.read(y))!=-1){
fos.write(y,0,b);
}
System.out.println("文件拷贝成功!");
fos.close();
fis.close();
字符流
方法名 | 说明 |
---|---|
InputStreamReader(InputStream in) | 使用默认字符编码创建InputStreamReader对象 |
InputStreamReader(InputStream in,String chatset) | 使用指定的字符编码创建InputStreamReader对象 |
OutputStreamWriter(OutputStream out) | 使用默认字符编码创建OutputStreamWriter对象 |
OutputStreamWriter(OutputStream out,String charset) | 使用指定的字符编码创建OutputStreamWriter对象 |
代码演示
public class ConversionStreamDemo {
public static void main(String[] args) throws IOException {
//OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("myCharStream\\osw.txt"),"GBK");
osw.write("中国");
osw.close();
//InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\osw.txt"));
InputStreamReader isr = new InputStreamReader(new FileInputStream("myCharStream\\osw.txt"),"GBK");
//一次读取一个字符数据
int ch;
while ((ch=isr.read())!=-1) {
System.out.print((char)ch);
}
isr.close();
}
}
流的传数据的方法
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 读取传来的数据
String line = br.readLine();//阻塞式
System.out.println("客户端说:" + line);
//写入数据
System.out.println("输入");
String str =sc.next();
bw.write(str);
bw.newLine();
bw.flush();
// 先关闭缓存流
if (br != null) {
br.close();
}
if (bw != null) {
bw.close();
}
// 再关闭socket
if (socket != null) {
socket.close();
}
用流上传文件&图片方法
//封装文本文件的数据
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\千峰培训\\pro\\english.txt"));
//封装输出流写数据
BufferedOutputStream bos = new BufferedOutputStream (s.getOutputStream());
int sum = 0;
int data = 0;
while ((data=bis .read())!=-1) {
bos.write(data);
sum++;
}
bos.flush();
//接收反馈
System.out.println("客户端写完了。。"+sum);
if(bis != null){
bis.close();
}
if(bos != null){
bos.close();
}
if(s != null){
s.close();
}
}
}
//接受文件&图片
BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
//把数据写入文本文件
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("english.txt"));
int sum = 0;
int data = 0;
while((data = bis.read()) !=-1){
bos.write(data);
sum++;
}
bos.flush();
System.out.println("服务器接收完毕。。"+sum);
if(bis != null){
bis.close();
}
if(bos != null){
bos.close();
}
if(s != null){
s.close();
}
}
}
流的接受与发送PrintWriter流输出
//发送数据
OutputStream os = client.getOutputStream();
PrintWriter pw = new PrintWriter(new OutputStreamWriter(os,"UTF-8"));
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream(),"UTF-8"));
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("请输入您要说的内容:");
String msg = sc.next();
pw.println(msg);
pw.flush();
String callmsg = br.readLine();
System.out.println("服务端回复:"+callmsg);
//接受数据
InputStream is = client.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(client.getOutputStream(),"UTF-8"));
Sring msg = br.readLine();
System.out.println(client.getInetAddress().getHostName()+"说:"+msg);
System.out.println("请输入您的回复:");
String callmsg = sc.next();
pw.println(callmsg);
pw.flush();
上一篇: Android如何遍历特定目录下所有文件
下一篇: SQL复杂查询(一)