你必须知道的261个Java语言问题笔记- Java流和文件操作1

来源:互联网 发布:.php打开乱码怎么解决 编辑:程序博客网 时间:2024/05/29 07:35
如何获取文件的属性信息?
在Java中,提供了对文件及目录进行操作的File类:
boolean exists():测试此抽象路径名表示的文件或目录是否存在。
String getName():返回由此抽象路径名表示的文件或目录的名称。
String getParent():返回此抽象路径名的父路径字符串,如果此路径名没有指定父目录,则返回null.
String getAbsolutePath():返回抽象路径名的绝对路径名字符串;
String getPath():将此抽象路径名转换为一个路径名字符串;
boolean isAbsolute():测试此抽象路径名是否为绝对路径名。
boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录;
boolean isFile():测试此抽象路径名表示的文件是否是一个标准文件;
boolean isHidden():测试此抽象路径名指定的文件是否是一个隐藏文件;
boolean lastModified():测试此抽象路径名表示的文件最后一次被修改的时间;
boolean length():返回由此抽象路径名表示的文件的长度,以字节为单位。
boolean canRead():测试应用程序是否可以读取此抽象路径名表示的文件。
boolean canWrite():测试应用程序是否可以修改此抽象路径名表示的文件。

如何判断文件是否为空?
File file = new File("F:\\b.txt");
if(file.exists()&&file.length()==0){
System.out.println("文件为空");
}

如何实现文件的创建、删除和移动?
文件创建:
public boolean createNewFile() throws IOException
文件删除
public boolean delete()
deleteOnExit():该方法可以实现在Java虚拟机退出的时候请求删除对象所指定的文件功能;
文件移动:
public boolean renameTo(File dest)
renameTo()方法在对文件重命名时可以修改路径和文件名,当且仅当重命名成功时,返回true;否则
返回false;

如何创建和删除文件夹?
创建文件夹:
使用File类中的mkdir()和mkdirs()方法,可以实现创建文件夹的功能。
mkdir()方法用于创建当前目录,必须保证父目录存在,否则创建失败。
mkdirs()方法可用于创建多层目录,如果父目录不存在,可以连同父目录一起创建。
删除文件夹:
使用File类中的delete()方法,既可以删除文件又可以删除文件夹。
在删除文件夹时,要求所删除的文件夹必须为空,否则删除失败。

如何遍历目录中所有的文件?
public File[] listFiles()
利用listFiles()方法遍历一个目录:
public void fileList(File file){
if(file.isFile()){
//如果是文件,输出文件名字
System.out.println("文件:"+file.getName());
}else if(file.isDirectory()){
//如果是文件夹,输出它的目录
System.out.println("文件夹,目录:"+file.getName());
//获取目录中的文件及子目录信息
File[] f1 = file.listFiles();
for(int i = 0;i<f1.length;i++){
//调用递归遍历f1数组中的每一个对象
fileList(f1[i]);
}
}
}

如何获取文件夹大小?
当File对象代表一个文件时,通过length()方法可以获取文件的大小,是以字节为单位的。
如果需要获取某个目录的大小,需要遍历目录中所有的文件,然后将每个文件的大小相加,相加
之和才有文件夹的大小。


什么是流?如何分类?具体包含哪些类?
流代表经过管道流通的数据。为了进行数据的输入和输出操作,Java把不同的输入和输出源抽象表述为流。
流的分类:
按照不同的分类方式,可以将流分为不同的类型。
按照流向不同,可以分为输入流和输出流;
按照处理单位不同,可以分为字节流和字符流。
1字节流:
字节流在数据读取和写入时以字节为单位,包含InputStream和OutputStream两个基础类。
InputStream用于按字节读取数据,其子类主要有以下几种:
ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用;
StringBufferInputStream:把一个String对象作为InputStream;
FileInputStream:把一个文件作为InputStream,实现对文件的读取操作。
PipedInputStream:实现了pipe的概念,主要在线程中使用;
SequenceInputStream:把多个InputStream合并为一个InputStream;
DataInputStream:从stream中读取基本类型(int,char等)数据;
BufferedInputStream:使用缓冲区读取字节数据;
LineNumberInputStream:记录InputStream内的行数,然后可以调用getLineNumber()和setLineNumber(int)方法;
PushbackInputStream:很少用到,一般用于编译器开发。
OutputStream用于按字节输出数据,其子类主要有以下几种:
ByteArrayOutStream:把字节信息存入内存中的一个缓冲区中;
FileOutputStream:把字节信息存入文件中;
PipedOutputStream实现了pipe的概念,主要在线程中使用;
SequenceOutputStream:把多个OutputStream合并为一个OutputStream;
DataOutputStream:往stream中输出基本类型(int、char等)数据;
BufferedOutStream:使用缓冲区将字节数据输出;
PrintStream:产生格式化输出;
字符流:
字符流在数据读取和写入时以字符为单位,在JDK1.1之前输入输出流只支持8位的字节流,
从JDK1.1开始,能够支持16位的Unicode字符流。字符流包含Reader和Writer两个基础类。
Reader用于按字符读取数据,其子类主要有以下几种:
CharArrayReader:与ByteArrayInputStream对应;
StringReader:与StringBufferInputStream对应;
FileReader:与FileInputStream对应;
PipedReader:与BufferedInputStream对应;
BufferReader:与BufferedInputStream对应;
LineNumberReader:与LineNumberInputStream对应;
PushBackReader:与PushbackInputStream对应;
Writer用于按字符输出数据,其子类主要有以下几种:
CharArrayWrite:与ByteArrayOutputStream对应;
FileWriter:与FileOutputStream对应;
PipedWrite:与PipedOutStream对应;
BufferedWrite:与BufferedOutputStream对应;
PrintWrite:与PrintStream对应;
阅读全文
0 0