实训20 2018.4.20
Posted goxxiv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实训20 2018.4.20相关的知识,希望对你有一定的参考价值。
File类:
File f=new File("F:\\Demo.java");
创建文件:
f.createNewFile(); 返回值boolean型
创建文件夹(目录):
f.mkdir();
f.mkdirs();
区别在于:mkdir()只能创建单层目录,而mkdirs()可以创建多层目录。
删除文件:
f.delete()
删除的文件不会进入回收站(作用相当于shift+delete的组合键)。
在删除时,要删除的文件夹中不能有子文件夹或文件,否则删除失败。
判断是否存在:
f.exists()
获取:
getAbsolutePath() 获得绝对路径
getName() 获得文件(夹)名
getPath() 获得(创建时使用的)路径。如果new File()时使用相对路径则返回相对路径,如果使用绝对路径则返回绝对路径。
length() 获得文件长度
File.separator 名称分隔符\(Windows下)
File.pathseparator 路径分隔符;(Windows下)
注:进行文件操作时需要处理异常。
FileFilter接口:
FileFilter接口中只有一个方法accpet()。该方法的作用是定义过滤规则,返回布尔类型,判断是否满足该规则。
因为是接口,所以在使用时需要创建类进行实现,实现accept()方法。
//过滤:找出目录下所有文件名以.java结尾的文件
class fileFilter implements FileFilter { @Override public boolean accept(File pathname) { return (pathname.getName().endsWith(".java")); } }
也可以使用匿名内部类实现FileFilter接口。
该接口可用于File类下的listFiles()方法:
(配合匿名内部类)
import java.io.*; public class Test { public static void main(String[] args) throws IOException { File file = new File("F:\\"); for (File f : file.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".jpg"); } })) { System.out.println(f); } } }
listFiles()方法会自动调用accept()方法。(见listFiles()源代码)
OutputStream抽象类:
方法:(字节流,操作的是字节)
write(int b) 把b写入文件。b输入的是int类型,但是表示的是ASCII值,所以在文件中显示对应的字符。
write(byte [] b) 把b中字符写入文件。
close() 关闭该流
FileOutputStream—OutputStream的子类:
构造方法:
FileOutputStream(File pathname);
FileOutputStream(String pathname, boolean b); 当传入的布尔值为false时,写入的内容会把文件中的内容全部覆盖掉;当是true时,表示在原有内容的基础上进行追加。
FileOutputStream(String pathname); 等价于FileOutputStream(String pathname, false);
输出流的操作步骤:
1.创建流对象,2.调用方法,3.关闭流对象
InputStream抽象类:
方法:(字节流,操作的是字节)
read() 从流中读入一个字节
read(byte [] b) 从流中读入一定数量的字节保存在byte[]数组b中。“一定长度”指的是可能文件中的内容无法填满b,那么此时长度为内容的长度;如果文件中的内容多于b数组长度,那么此时长度为b数组长度。
close()
FileInputStream—InputStream的子类:
输出文件中的所有字符:
方法一:
public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("F:/Demo.java"); int len = 0; byte[] bs = new byte[10]; while ((len = fis.read(bs))!=-1) { System.out.print(new String(bs,0,len));
//使用String的构造方法创建一个String对象,参数:byte[] bs,int i,int j:从给定字符数组bs的第i个位置读到第j个位置之前(j-1处) } } catch (Exception e) { throw new RuntimeException(); } finally { try { fis.close(); } catch (Exception e) { } } }
使用数组接收流传入的内容。其中,while循环的作用在于:当文件中字符过多且大于给定数组的长度时,可以循环读取流中内容。
方法二:
public static void main(String[] args) { FileInputStream fis = null; try { // System.out.println(File.separator); fis = new FileInputStream("F:/Demo.java"); int len2 = 0; for (int i = 0; (len2 = fis.read()) != -1; i++) { System.out.print((char) len2); } } catch (Exception e) { // TODO: handle exception throw new RuntimeException(); } finally { try { fis.close(); } catch (Exception e) { } } }
使用read()方法读取单个字符并打印。
IOException异常的处理细节:
1. 确保流对象的作用域,保证catch和finally能够使用该流对象。
2. 在catch里面处理异常——IOException一旦出现,多为硬件问题,一般不能有程序处理,可以打印异常信息并重试。
import java.io.*; public class TestFileInput { public static void main(String[] args) { FileInputStream fis = null;
//对应第1条,因为finally中需要使用fis.close()来关闭该流,所以不能写在try代码块中。
//处理办法:在try代码块外定义并附空值,在try代码块内创建对象。 try { fis = new FileInputStream("F:/Demo.java"); int len = 0; byte[] bs = new byte[10]; while ((len = fis.read(bs)) != -1) { System.out.print(new String(bs, 0, len));
} } catch (Exception e) { throw new RuntimeException();
//在此处抛出运行时异常,终止程序,或者return;否则程序会认为异常已处理,并继续执行下面的代码 } finally { try {
if(fis!=null) fis.close();//在关闭流时也可能出现异常,所以需要try-catch } catch (Exception e) { } } } }
以上是关于实训20 2018.4.20的主要内容,如果未能解决你的问题,请参考以下文章
2018-4-20 17周3次课 shell函数数组告警需求分析