IO
输入流InputStream 输出流OutputStream
文件:硬盘上的文件 txt docx 电影 图片
本章的核心:通过IO来操作文件
File
import java.io.File;
import java.io.IOException;
public class demo03File {
public static void main(String[] args) {
//File:文件/目录/不存在的文件或目录
File file = new File("hello.txt");
System.out.println("相对路径"+file.getPath());
System.out.println("绝对路径"+file.getAbsolutePath());
System.out.println("文件名称"+file.getName());
System.out.println("文件大小"+file.length());
File fi = new File("d:/web");
System.out.println(file.isFile()==true?"文件":"非文件");
System.out.println(fi.isDirectory()==true?"目录":"非目录");
boolean flag = file.exists();//是否存在
try{
if (flag) {
file.delete();
System.out.println("删除成功");
//彻底删除(不过回收站)
}else{
file.createNewFile();
System.out.println("创建成功");
}
}catch(IOException e){
e.printStackTrace();
}
}
}
相对路径/绝对路径:
- 如果File(“绝对路径”):getPath()和getAbsolutePath()的结果一致,打印的都是绝对路径
- 如果File(“相对路径”):getPath()打印相对路径 getAbsolutePath()打印绝对路径
字节流
输入流InputStream
InputStream in = new FileInputStream(new File("d://abc.txt"));
System.out.println(in.available());//长度
byte []buf = new byte[in.available()];//内存
in.read(buf);//流入内存
System.out.println(new String(buf));//转为String类型
in.close();//关闭
}
输出流 OutputStream
OutputStream outputStream = new FileOutputStream("d://xyz.txt");
outputStream.write("helloworld".getBytes());
outputStream.close();
复制
FileInputStream in = new FileInputStream("d:/abc.txt");
FileOutputStream out = new FileOutputStream("d:/xyz.txt");
byte []buf = new byte[10];//缓冲区为byte
int len = -1;
while((len=in.read(buf))!=-1){//边读边写
out.write(buf,0,len);//注意尾巴
}
if(out!=null)
out.close();
if(in!=null)
in.close();
字符流
Reader/Writer
Reader reader = new FileReader("d:/abc.txt");
Writer writer = new FileWriter("d:/xyz.txt");
char[] buf = new char[4];//缓冲区为char
StringBuffer sb = new StringBuffer();
int len = -1;
while((len=reader.read(buf))!=-1){
sb.append(buf,0,len);
}
System.out.println(sb);
String content = sb.toString();
content = content.replace("{name}","葛文婧")
.replace("{school}","内蒙古农业大学")
.replace("{123456}","15147484415");
writer.write(content);
writer.close();
reader.close();
自带缓冲区的字符流
BufferReader/BufferWrite 自带缓冲区 不需要定义
带缓冲区的字符流 对象 = new 带缓冲区的字符流(字符流)
close原则:
1.先关出再关入
2.先关外再关内
Reader reader = new FileReader("d:/abc.txt");
Writer writer = new FileWriter("d:/xyz.txt");
BufferedReader br = new BufferedReader(reader);
BufferedWriter bw = new BufferedWriter(writer);
StringBuffer sb = new StringBuffer();
String line = null;
while((line= br.readLine())!=null){
sb.append(line);
}
System.out.println(sb);
String content = sb.toString();
content = content.replace("{name}","葛文婧")
.replace("{school}","内蒙古农业大学")
.replace("{123456}","15147484415");
bw.write(content);
bw.close();
br.close();
writer.close();
reader.close();
二进制流
DataInputStream/DataOutStream
二进制流 对象 = new 二进制流(字节流)
FileInputStream in = new FileInputStream("javaClass/src/IO/abc.txt");
InputStream datainput = new DataInputStream(in);
FileOutputStream out = new FileOutputStream("javaClass/src/IO/xyz.txt");
OutputStream dataout = new DataOutputStream(out);
byte []buy = new byte[10];
int len = -1;
while((len=datainput.read(buy))!=-1){
dataout.write(buy,0,len);
}
dataout.close();
datainput.close();
out.close();
in.close();
atainput.read(buy))!=-1){
dataout.write(buy,0,len);
}
dataout.close();
datainput.close();
out.close();
in.close();