2020-09-22课堂笔记
主知识点
1.File类
File file=new File("d:\\Picture/a.jpg");
if(!file.exists())
{
file.createNewFile();
}
包含盘符的路径名,需要:和\(绝对路径时避免识别成反义字符)
方法 | 返回值 | 意义 |
---|---|---|
exists() | boolean | 存在返回true |
canRead() | boolean | 可读返回true |
canWrite() | boolean | 可写返回true |
canExecute() | boolean | 可执行返回true |
getName() | String | 返回文件名称 |
2.关于什么是流
站在程序的角度
输入流的指向称为源,程序从指向源的输入流中读取源中的数据。当程序需要读取数据时,就会开启一个通向数据源的流,这个数据源可以是文件、内存或者网络连接。
输出流的指向称为目的地,程序通过向输出流中写入数据把信息传递到目的地
即:(程序)从输入流中读,向输出流中写
字节流(ASCII)处理二进制文件,字符流(Unicode)处理文本文件
3.InputStream、OutputStream(字节流)
所有InputStream和OutputStream的子类都是字节流
包括:FileInputStream、BufferedInputStream、
FileOutputStream、BufferedOutputStream
4.Reader、Writer(字符流)
字符流不能用于处理图片、视频、音频
FileReader、FileWriter
BufferedReader、BufferedWriter
示例:
//向文件中写入内容
File file=new File("XXX.txt");
if(!file.exists())
{
file.createNewFile();
}
FileWriter fw=new FileWriter(file);
BufferedWriter bw=new BufferedWriter(fw);
bw.write("XXXXXXXX");
bw.nextLine();
bw.close();
fw.close();
//从文件中读出每一行,并打印在控制台上
File file=new File("XXX.txt");
FileReader fr=new FileReader(file);
BufferedReader bufr=new BufferedReader(fr);
String s=null;
while((s=bufr.readLine())!=null)
{
System.out.println(s);
}
bufr.close();
fr.close();
5.重要提醒
1.记得释放资源,先关(close)内层,再关外层
2.带缓冲的流,只有关闭后,才能写入成功!如不想关闭可以使用flush()方法,冲入也行,
6.File类
1.java.io.file包下的流类
2.file类不能读写文件 可以操作文件属性,增删文件,
3.查询是否可写,可读,可执行
4.不能操作系统文件
案例一
1.分两次录入静夜思,第一次录入《静夜思》 回车 四个空格 作者:李白,第二次录入的时候直接输入所有的诗句。然后使用字符流把他写入到D:/唐诗.txt当中,最后读取出来打印在控制台
字符流
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File file=new File("d:/唐诗.txt");
if(!file.exists())
{
file.createNewFile();
}
FileWriter fW=new FileWriter(file);
fW.write("静夜思\n");
fW.write("作者:李白\n");
fW.close();
FileWriter fW2=new FileWriter(file,true);
fW2.write("窗前明月光,\n");
fW2.write("疑是地上霜。\n");
fW2.write("举头望明月,\n");
fW2.write("低头思故乡。\n");
fW2.close();
InputStreamReader isr=new InputStreamReader(new FileInputStream(file),"gbk");
BufferedReader br=new BufferedReader(isr);
String lineTxt=null;
String lineTxt2=null;
while((lineTxt=br.readLine())!=null) {
System.out.println(lineTxt);
lineTxt2=br.readLine();
System.out.println(lineTxt2);
}
br.close();
isr.close();
}
//1.第一次录入
// 分析:字符流
Writer writer=new FileWriter("d:\\唐诗.txt");
BufferedWriter bw=new BufferedWriter(writer);
bw.write(" 静夜思");
bw.newLine();
bw.write(" 作者:李白");
bw.newLine();
bw.close();
writer.close();
writer=new FileWriter("d:\\唐诗.txt",true);
bw=new BufferedWriter(writer);
bw.write("床前明月光,");
bw.newLine();
bw.write("疑是地上霜。");
bw.newLine();
bw.write("举头望明月,");
bw.newLine();
bw.write("低头思故乡。");
bw.close();
writer.close();
//2.读取
//字符流
Reader reader=new FileReader("d:/唐诗.txt");
//读取器
BufferedReader br=new BufferedReader(reader);
String temp=null;
while((temp=br.readLine())!=null)
{
System.out.println(temp);
}
br.close();
reader.close();
案例二
2.使用代码复制一个图片,把原图片复制到D:/picture/图片.jpg当中 要求图片可以正常打开,字节流
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
/**2.使用代码复制一个图片,把原图片复制到D:/picture/图片.jpg当中 要求图片可以正常打开*/
File file=new File("C:\\Users\\12077\\Pictures/xiaoyuan.jpg");
File file2=new File("D:\\图片.jpg");
if(!file2.exists()) {
file2.createNewFile();
}
//FileInputStream和FileOutPutStream
FileInputStream is=new FileInputStream(file);
FileOutputStream oStream=new FileOutputStream(file2);
//另一种处理方法
//Byte[] buf=new Byte[in.available];
//in=read(buf);
//oStream=write(buf);
int read=-1;
while ((read=is.read())!=-1) {
oStream.write(read);
}
is.close();
oStream.close();
}
String path="D:/Picture/A-Z/A.jpg";
//复制到d:/Picture/图片.jpg
File oldFile=new File(path);
//字节流
InputStream is=new FileInputStream(oldFile);
byte [] datas=new byte[is.available()];
is.read(datas);
//创建输出流
File newFile=new File("d:/Picture/图片.jpg");
if(!newFile.exists())
newFile.createNewFile();
OutputStream os=new FileOutputStream(newFile);
os.write(datas);
os.close();
is.close();