建筑常用的模板下载网站有哪些,平顶山做网站推广,阜宁网站建设,公司做外贸网站File类 File类主要是JAVA为文件这块的操作(如删除、新建等)而设计的相关类File类的包名是java.io#xff0c;其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较
创建一个文件/文件夹
删除文件/文件夹
获取文件/文件夹
判断文件/文件夹是否存在
对文件夹进…File类 File类主要是JAVA为文件这块的操作(如删除、新建等)而设计的相关类File类的包名是java.io其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较
创建一个文件/文件夹
删除文件/文件夹
获取文件/文件夹
判断文件/文件夹是否存在
对文件夹进行遍历
获取文件的大小File类是一个与系统无关的类任何的操作系统都可以使用这个类中的方法 重点记住这第三个单词 file——文件 directory——文件夹/目录 path——路径
绝对路径————是一个完整的路径
以盘符 比如C开始的路径
c:\a.txt
c:\demo\b.txt相对路径————是一个简化的路径
相对指的是相对于当前项目的根目录
如果使用当前项目的根目录路径可以简化书写
D:\java\Java语言高级\File类\File类\File类的概述.avi–简化为——File类的概述.avi(可以省略项目的根目录)注意
路径是不区分大小写
路径中的文件名称分隔符widows使用反斜杠反斜杠是转义字符两个反斜杠代表一个普通反斜杠。File类的静态属性
static String pathSeparator——与系统有关的路径分隔符为了方便它被表示为一个字符串。
static char pathSeparatorChar——与系统有关的路径分隔符。
windows下是分号,Linux下是冒号
static String Separator——与系统有关的默认名称分隔符它被表示为一个字符串。
static char SeparatorChar——与系统有关的默认名称分隔符。
windows下是 \,Linux下是 /public class filetest {public static void main(String[] args) {System.out.println(File.pathSeparator); //系统路径分隔符win是分号liunx是冒号System.out.println(File.separator);}
}File类的构造方法
File(String pathname)——通过将给定路径名字符串转换为抽象路径名来创建一个新的File实例。 参数
String pathname————字符串的路径名称
路径可以是以文件结尾也可以是以文件夹结尾(win中文件有扩展名就是文件平。
路径可以是相对路径以项目根目录也可以是绝对路径。
路径可以是存在的也可以是不存在的。
创建File对象只是把字符串路径封装为File对象不考虑路径的真假情况。public class filetest {public static void main(String[] args) throws IOException {File file new File(xiong.txt);file.createNewFile(); //只是文件名的话文件创建放在项目的根目录下。File file2 new File(xiong);file2.createNewFile();file2.mkdir();}
}File(String parent String child)——根据parent路径名字符串和child路径名字符串来创建一个新的File实例。
参数————————把路径分成了两部分
String parent————父路径,该路径中的文件夹是已存的不存在会报错
String child—————子路径
好处
父路径和子路径可以单独书写使用起来非常灵活父路径和子路径都可以变化。public class filetest {public static void main(String[] args) throws IOException {File file new File(C:\\abc\\,ccc.txt);file.createNewFile();System.out.println(file.getAbsolutePath());}
}File(File parent String child)——根据parent路径名字符串和child路径名字符串来创建一个新的File实例。
好处
父路径和子路径可以单独书写使用起来非常灵活父路径和子路径都可以变化。
父路径是File类型可以使用File的方法对路径进行一些操作在使用路径创建对象。File fileparent new File(c:\\abc);fileparent.mkdir();File file new File(fileparent,ccc.txt);file.createNewFile();System.out.println(file.getAbsolutePath());
File类中访问文件名相关的常用方法 public String getName()————返回此File标识的文件或目录的名称。 public String getPath()————将此File转换为路径名字符串。 public String getAbsolutePath()————返回此File的绝对路径名字符串返回的是绝对路径。 public String getParent()————返回File对象所对应的目录最后一级子目录的父目录名称。 public boolean renameTo(File newName)————重命名此File对象所对应的文件或目录成返回true File类检查文件的相关常用方法 public boolean exists()————此File表示的文件或目录是否实际存在 。 public boolean isDirectory()————此File表示的是否为目录 。 public boolean isFile()————此File表示的是否为文件 。 public canWrite()————此File是否可写 public canRead()————此File是否可读 public isAbsolute()————此判断创建File对象时是不是用的是绝对路径 获取文件常规信息的常用方法 public long lastModified()————返回文件的最后修改时间。 public long length()————返回文件内容的长度。
File类创建删除文件的常用方法 public boolean creatNewFile()——当且仅当具有该名称的文件尚不存在时创建一个新的空文件。 creatNewFile声明抛出了IOException我们调用这个方法就必须处理这个异常要么throws要么try catch public boolean delete()——删除由此File表示的文件或目录。 此方法可以删除构造方法路径中给出的文件/文件夹。注意delete方法直接在硬盘删除文件/文件夹不走回收站删除要谨慎。 public boolean mkdir()——创建由此File表示的目录。 创建单级空文件夹 public boolean mkdirs()——创建由此File表示的目录包括任何必需但不存在的父目录。 既可以创建单级空文件夹也可以创建多级文件夹
File类遍历(文件夹)目录功能 public String[ ] list( )——返回一个String数组表示该File目录中的所有子文件或子目录。 public File[ ] listFiles( )——返回一个File数组表示该File目录中的所有子文件或子目录。 注意 list方法和listFiles方法遍历的是构造方法中给出的目录。 如果构造方法中给出的目录的路径不存在会抛出空指针异常。 如果构造方法中给出的路径不是一个目录也会抛出空指针异常。
public class filefind {public static void main(String[] args) {File filenew File(C:\\Users\\Administrator\\Desktop\\STSWORKSPACE\\EduSystem);String[] fileNames file.list();File[] files file.listFiles();for(String filename:fileNames){System.out.println(filename);}for(File subfile:files){System.out.println(subfile);}}
}
----------------------------------------------------------------------.classpath
.mymetadata
.project
.settings
src
WebRoot
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\.classpath
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\.mymetadata
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\.project
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\.settings
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\src
C:\Users\Administrator\Desktop\STSWORKSPACE\EduSystem\WebRoot
文件过滤器的原理和使用 在File类中有两个listFiles重载的方法方法的参数传递的就是过滤器。 File[ ] listFiles(FilesFilter filter) java.io.FilesFilter 接口————用于抽象路径名File对象的过滤器。我常通过内部类的方式执行accept方法。 FilesFilter 接口里包含了一个抽象方法boolean accept(File pathname) 参数 File pathname———使用listFiles方法遍历目录得到的每一个文件对象。
例找到一个目录下所有扩展名为.java的文件并打印其绝对路径
public class filefind {public static void main(String[] args) {File filenew File(C:\\Users\\Administrator\\Desktop\\STSWORKSPACE\\EduSystem);//文件过滤器筛选想要的文件getJavaFiles(file);}//获得所有.java文件public static void getJavaFiles(File file){if(!file.isDirectory()){return;}//是文件夹进一步扫描File[] files file.listFiles(new FileFilter() {Overridepublic boolean accept(File subFile) {if(subFile.isDirectory()) return true;elsereturn subFile.getName().toLowerCase().endsWith(.java);}});for(File rsFile:files){if(rsFile.isDirectory()){getJavaFiles(rsFile); //递归如果找到的子文件还是文件夹的话再找}else{System.out.println(rsFile); //输入文件的绝对路径}}}
} File[ ] listFiles(FilenameFilter filter) java.io.FilenameFilter 接口————实现此接口的类实例可用于过滤文件名。 FilenameFilter接口里包含了一个抽象方法boolean accept(File dirString name) 参数 File dir ——————构造方法中传递的被遍历的目录 String name————使用lisFiles方法遍历目录获取的每一个文件/文件夹的名称。
java IO流
Java IO流的概念 大多数应用程序都需要实现与设备之间的数据传输例如键盘可以输入数据显示器可以显示程序的运行结果等。 在Java中将这种通过不同输入输出设备键盘内存显示器网络等之间的数据传输抽象的表述为“流”。 Java中的“流”都位于java.io包中称之为IO输入输出流。 输入流和输出流是相对于内存设备而言的将外设中的数据读取到内存中即输入将内存的数据写入到外设中即输出。 注java的输入流主要是InputStream和Reader作为基类而输出流则是主要由outputStream和Writer作为基类。它们都是一些抽象基类无法直接创建实例。 字节流和字符流的用法几乎完成全一样区别在于字节流和字符流所操作的数据单元不同 字节流操作的单元是数据单元是8位的字节字符流操作的是数据单元为16位的字符。 字节流主要是由InputStream和outPutStream作为基类而字符流则主要有Reader和Writer作为基类。
按照流的角色划分为节点流和处理流. 可以从/向一个特定的IO设备如磁盘网络读/写数据的流称为节点流。节点流也被称为低级流。 处理流则用于对一个已存在的流进行连接和封装通过封装后的流来实现数据的读/写功能。处理流也被称为高级流。 当使用处理流进行输入/输出时程序并不会直接连接到实际的数据源没有和实际的输入和输出节点连接。 使用处理流的一个明显的好处是只要使用相同的处理流程序就可以采用完全相同的输入/输出代码来访问不同的数据源 打个比方在进一步理解流的概念 java把所有设备里的有序数据抽象成流模型简化了输入/输出处理。java IO流共涉及40多个类这些类看上去很杂乱但实际上很有规则而且彼此之间存在非常紧密的联系 Java Io流的40多个类都是从如下4个抽象类基类中派生出来的。 InputStream/Reader: 所有的输入流的基类前者是字节输入流后者是字符输入流。 OutputStream/Writer: 所有输出流的基类前者是字节输出流后者是字符输出流。
对于InputStream和Reader而言它们把输入设备抽象成为一个”水管“这个水管的每个“水滴”依次排列如图 输入流使用隐式的记录指针来表示当前正准备从哪个“水滴”开始读取每当程序从InputStream或者Reader里面取出一个或者多个“水滴”后记录指针自定向后移动除此之外InputStream和Reader里面都提供了一些方法来控制记录指针的移动。 对于OutputStream和Writer而言它们同样把输出设备抽象成一个”水管“只是这个水管里面没有任何水滴如图 当执行输出时程序相当于依次把“水滴”放入到输出流的水管中 输出流同样采用隐示指针来标识当前水滴即将放入的位置 每当程序向OutputStream或者Writer里面输出一个或者多个水滴后记录指针自动向后移动。 处理流可以“嫁接”在任何已存在的流的基础之上这就允许Java应用程序采用相同的代码 透明的方式来访问不同的输入和输出设备的数据流。
字节流和字符流的基类方法
IO体系的基类InputStream/ReaderOutputStream/Writer字节流和字符流的操作方式基本一致
只是操作的数据单元不同——字节流的操作单元是字节字符流的操作单元是字符。
所以字节流和字符流就整理在一起了。InputStream/ReaderOutputStream/Writer是所有输入/输出流的抽象基类
本身并不能创建实例来执行输入/输出
但它们将成为所有输入/输出流的模板
所以它们的方法是所有输入/输出流都可使用的方法。在InputStream里面包含读数据的方法。 int read(); 从输入流中读取单个字节返回所读取的字节数据字节数据可直接转换为int类型。 int read(byte[] b) 从输入流中最多读取b.length个字节的数据并将其存储在字节数组b中返回实际读取的字节数。 int read(byte[] b,int off,int len); 从输入流中最多读取len个字节的数据并将其存储在数组b中放入数组b中时并不是从数组起点开始而是从off位置开始返回实际读取的字节数。
在Reader中包含也有如下3个方法。 int read(); 从输入流中读取单个字符返回所读取的字符数据字符数据可直接转换为int类型。 int read(char[] b) 从输入流中最多读取b.length个字符的数据并将其存储在字节数组b中返回实际读取的字符数。 int read(char[] b,int off,int len); 从输入流中最多读取len个字符的数据并将其存储在数组b中放入数组b中时并不是从数组起点开始而是从off位置开始返回实际读取的字符数。 InputStream和Reader提供的一些移动指针的方法
void mark(int readlimit ); 在记录指针当前位置记录一个标记mark。
boolean markSupported(); 判断此输入流是否支持mark()操作即是否支持记录标记。
void reset(); 将此流的记录指针重新定位到上一次记录标记mark的位置。
long skip(long n); 记录指针向前移动n个字节/字符。OutputStream和Writer OutputStream和Writer的用法也非常相似两个流都提供了如下三个方法 void write(int c); 将指定的字节/字符输出到输出流中其中c即可以代表字节也可以代表字符。 void write(byte[]/char[] buf); 将字节数组/字符数组中的数据输出到指定输出流中。 void write(byte[]/char[] buf, int off,int len ); 将字节数组/字符数组中从off位置开始长度为len的字节/字符输出到输出流中。 因为字符流直接以字符作为操作单位所以Writer可以用字符串来代替字符数组即以String对象作为参数。 Writer里面还包含如下两个方法 void write(String str); 将str字符串里包含的字符输出到指定输出流中。 void write (String str, int off, int len); 将str字符串里面从off位置开始长度为len的字符输出到指定输出流中。
输入输出流的体系
java输入/输出流体系中常用的流的分类 访问文件数组管道字符串都是节点流除了基类节点流其它是处理流类处理流要与它结合起来才起作用。 下面是整理出这些IO流的特性及使用方法只有清楚每个IO流的特性和方法。才能在不同的需求面前正确的选择对应的IO流进行开发。 1文件输入输出流 1.1文件输入流 FileInputStream和FileReader 它们都是节点流——会直接和指定文件关联。
public class inputstream {public static void main(String[] args) throws IOException {//把在c盘上一个文件读出来如果文件是图片视频音频要用字节流文本文件字节流字符流都可用// InputStream is new FileInputStream(C:\\a.txt);FileInputStream fisnull;try{fis new FileInputStream(c:\\a.txt);//定义两个东西一个水漂数组一个计数器byte[] b new byte[1024];int hasRead 0;while((hasReadfis.read(b))0){System.out.println(new String(b,0,hasRead));}}catch(Exception e){e.printStackTrace();}finally {//为什么必须有finally块呢fis.close();}}
}
注上面程序最后使用了fis.close()来关闭该文件的输入流程序里面打开的文件IO资源不属于内存的资源 垃圾回收机制无法回收该资源所以必须在程序里关闭打开的IO资源。 Java 7改写了所有的IO资源类它们都实现了AntoCloseable接口因此都可以通过自动关闭资源的try语句来关闭这些IO流。 改进后的代码如下,不要finally块了
public class inputstream {public static void main(String[] args) {try(FileInputStream fis new FileInputStream(c:\\a.txt)){//定义两个东西一个水漂数组一个计数器byte[] b new byte[1024];int hasRead 0;while((hasReadfis.read(b))0){System.out.println(new String(b,0,hasRead));}}catch(Exception e){e.printStackTrace();}}}