@1825273284
2018-07-03 22:50
字数 7346
阅读 1
学习日记## 标题 ##
file
新建文件和获取文件信息
常用方法:
canRead
public boolean canRead()测试应用程序是否可以读取由此抽象路径名表示的文件。 在某些平台上,可以使用特殊权限启动Java虚拟机,以允许它读取标记为不可读的文件。 因此,这个方法可能返回true即使该文件不具有读取权限。
结果
true当且仅当此抽象路径名指定的文件存在并可由应用程序读取时; false否则
异常
SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkRead(java.lang.String)方法拒绝对该文件的读取访问
canWrite
public boolean canWrite()测试应用程序是否可以修改由此抽象路径名表示的文件。 在某些平台上,可能会启动具有特殊权限的Java虚拟机,以允许它修改标记为只读的文件。 因此,即使文件被标记为只读,该方法也可能返回true 。
结果
true当且仅当文件系统实际上包含由该抽象路径名表示的文件并且允许应用程序写入该文件时; false否则。
异常
SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkWrite(java.lang.String)方法拒绝对该文件的写访问
exists
public boolean exists()测试此抽象路径名表示的文件或目录是否存在。
结果
true当且仅当存在由此抽象路径名表示的文件或目录时; false否则
异常
SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkRead(java.lang.String)方法拒绝对文件或目录的读取访问
isDirectory
public boolean isDirectory()测试此抽象路径名表示的文件是否为目录。
在需要区分I / O异常和文件不是目录的情况下,或同时需要同一文件的几个属性的情况下,可以使用Files.readAttributes方法。
结果
true当且仅当该抽象路径名表示的文件存在且为目录时; false否则
异常
SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkRead(java.lang.String)方法拒绝对该文件的读取访问
isFile
public boolean isFile()测试此抽象路径名表示的文件是否为普通文件。 如果文件不是目录,并且另外满足其他依赖于系统的条件,文件是正常的 。 Java应用程序创建的任何非目录文件都保证是一个普通文件。
在需要区分I / O异常与文件不是正常文件的情况下,或同时需要同一文件的几个属性的情况下,可以使用Files.readAttributes方法。
结果
true当且仅当该抽象路径名表示的文件存在且为普通文件时; false否则
异常
SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkRead(java.lang.String)方法拒绝对该文件的读取访问
isHidden
public boolean isHidden()测试此抽象路径名命名的文件是否为隐藏文件。 隐藏的确切定义是依赖于系统的。 在UNIX系统上,如果文件的名称以句点字符( '.' )开头,则该文件被视为隐藏。 在Microsoft Windows系统上,如果文件在文件系统中被标记为这样,则文件被认为是隐藏的。
结果
true当且仅当该抽象路径名表示的文件根据底层平台的约定被隐藏时
异常
SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkRead(java.lang.String)方法拒绝对文件的读取访问
lastModified
public long lastModified()返回此抽象路径名表示的文件上次修改的时间。
凡需要从那里的情况下区分I / O异常0L返回,或者在同一时间都需要在同一文件的多个属性,或者在需要的上次访问或创建时间的时间,那么可以使用Files.readAttributes方法。
结果
long值表示上次修改文件的时间,以时间为单位(1970年1月1日00:00:00 GMT)测量,或者如果文件不存在 0L ,或者如果发生I / O错误
异常
SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkRead(java.lang.String)方法拒绝对文件的读取访问
length
public long length()返回由此抽象路径名表示的文件的长度。 如果此路径名表示目录,则返回值未指定。
其中要求区分该情况下的I / O异常0L其中相同文件的多个属性是必需的,同时被返回,或者,那么Files.readAttributes可以使用方法。
结果
由此抽象路径名表示的文件的长度(以字节为单位),如果文件不存在, 0L 。 某些操作系统可能会返回0L用于表示系统依赖实体(如设备或管道)的路径名。
异常
SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkRead(java.lang.String)方法拒绝对文件的读取访问
createNewFile
public boolean createNewFile()
throws IOException当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。 检查文件的存在和文件的创建(如果不存在)是对可能影响文件的所有其他文件系统活动是单一的操作。
注意:此方法不应用于文件锁定,因为生成的协议不能使其可靠地工作。 应该使用FileLock设施。
结果
true如果命名文件不存在并被成功创建; false如果命名文件已经存在
异常
IOException - 如果发生I / O错误
SecurityException - 如果存在安全管理员,并且其 SecurityManager.checkWrite(java.lang.String)方法拒绝对该文件的写入访问
delete
public boolean delete()删除由此抽象路径名表示的文件或目录。 如果此路径名表示目录,则目录必须为空才能删除。
请注意, Files类定义了一个delete方法,当一个文件不能被删除时,它会抛出一个IOException 。 这对于错误报告和诊断文件无法被删除的原因很有用。
结果
true当且仅当文件或目录被成功删除时; false否则
异常
SecurityException - 如果安全管理器存在,并且其 SecurityManager.checkDelete(java.lang.String)方法拒绝对该文件的删除访问
代码:
package file;
import java.io.*;
public class FileTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("work.txt");
if(file.isFile()) {
String name = file.getName();
long length = file.length();
boolean hidden = file.isHidden();
long time = file.lastModified();
System.out.println("文件名称:"+name);
System.out.println("文件长度:"+length);
System.out.println("文件是否被隐藏:"+hidden);
System.out.println("文件最后被修改的时间:"+time);
}else {
System.out.println("文件不存在");
}
}
}
java中向文件读入或写入string时,都是通过byte流的方式,需要使用FileOutputStream、FileinputStream和FileReader、FileWriter类来实现。每个汉字占两个字节,每个英文字母占一个字节。
FileOutputStream和FileInputStream是以byte行式写入文件,需要将其他类型转换为byte类型,运用getBytes()方法转换。
FileReader和Filewriter是可以基本类型传入文件的,不过注意读入时只能用char数组读入其它类型均不能完成。如果用toString方法只能将byte流的字节转成字符串类型,而不能翻译此字节流,所以只能用new String(byt,a,b),a为起始位置,b为结束位置,byt为操作的流,即新建一个字符串对象来储存转化的字符串。
参见代码:
package file;
import java.io.*;
public class FileTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("work.txt");
try {
FileWriter out = new FileWriter(file);
String buy = "hello,world!";
out.write(buy);
out.close();
}catch(Exception e){
e.printStackTrace();
}
try {
FileReader in = new FileReader(file);
char byt[]= new char[1024];
int len = in.read(byt);
System.out.println("文件信息:"+ new String(byt,0,len));
in.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
带有缓存的输入流和输出流(BufferedInputStream、BufferedInputStream和BufferedReader、Bufferedwriter)
BufferedWriter
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。
可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。
提供了一个newLine()方法,它使用平台自己的系统属性line.separator定义的行分隔符概念。 并非所有平台都使用换行符('\ n')来终止行。 因此,调用此方法来终止每个输出行,因此优选直接写入换行符。
一般来说,Writer将其输出立即发送到底层字符或字节流。 除非需要提示输出,否则建议将BufferedWriter包装在其write()操作可能很昂贵的Writer上,例如FileWriters和OutputStreamWriters。
BufferedReader
常用方法:
void close()
关闭流并释放与之相关联的任何系统资源。
Stream lines()
返回一个 Stream ,其元素是从这个 BufferedReader读取的行。
void mark(int readAheadLimit)
标记流中的当前位置。
boolean markSupported()
告诉这个流是否支持mark()操作。
int read()
读一个字符
int read(char[] cbuf, int off, int len)
将字符读入数组的一部分。
String readLine()
读一行文字。
boolean ready()
告诉这个流是否准备好被读取。
void reset()
将流重置为最近的标记。
long skip(long n)
跳过字符
Bufferedwriter和BufferedReader一般会用FileWriter和FileReader进行包装,已达到更快的运行速度。注意在关闭流的适合一定要先关闭BufferedReader/Bufferedwriter,再关闭FileWriter、FileReader的流。
参考代码:
package file;
import java.io.*;
public class FileTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String con[] = {"好久不见","最近怎么样","笑口常开"};
File file = new File("work.txt");
try {
FileWriter fw = new FileWriter(file);
BufferedWriter bufw = new BufferedWriter(fw);//每个汉字是两个byte,字母为一个字节
for(int i = 0 ; i < con.length ; i++ ) {
bufw.write(con[i]);
bufw.newLine();
}
bufw.close();
fw.close();
}catch(Exception e){
e.printStackTrace();
}
try {
FileReader in = new FileReader(file);
BufferedReader infw = new BufferedReader(in);
String s = null;
int i = 0;
while((s=infw.readLine())!=null) {
i++;
System.out.println("第"+i+"行:"+s);
}
in.close();
infw.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
数据I/o流(DataInputStream、DataOutputStream)
可以以不同的方式去将数据写入文件,读取时只可以用writeUTF方法,不过此类写入文件的信息会出现乱码
package file;
import java.io.*;
public class FileTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
FileOutputStream fs = new FileOutputStream("work.txt");
DataOutputStream ds = new DataOutputStream(fs);
ds.writeUTF("使用writeUFU方法写入文件");
ds.writeChars("使用WriteChars方法写入文件");
ds.writeBytes("使用WriteByte方法写入文件");
ds.close();
FileInputStream fis = new FileInputStream("work.txt");
DataInputStream dis = new DataInputStream(fis);
System.out.println(dis.readUTF());
}catch(Exception e) {
e.printStackTrace();
}
}
}
压缩文件
File[] listFiles()
返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件
ZipEntry(String name)
创建具有指定名称的新的zip条目。
putNextEntry
public void putNextEntry(ZipEntry e)
throws IOException开始编写新的ZIP文件条目,并将流定位到条目数据的开头。 关闭当前条目,如果仍然有效。 如果没有为条目指定压缩方法,将使用默认压缩方法,如果条目没有设置修改时间,将使用当前时间。
ZipOutputStream
public ZipOutputStream(OutputStream out,Charset charset)
创建一个新的ZIP输出流。
package zip;
import java.util.zip.;
import java.io.;
public class Myzip {
private void zip(String zipFileName,File inputFile) throws Exception{
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
zip(out,inputFile,"");
System.out.println("压缩中....");
out.close();
}
private void zip(ZipOutputStream out,File f,String base)throws Exception {
if(f.isDirectory()) {
File []fl = f.listFiles();
if(base.length()!=0) {
out.putNextEntry(new ZipEntry(base+"/"));
}
for(int i = 0 ; i < fl.length;i++) {
zip(out,fl[i],base+fl[i]);
}
}else {
out.putNextEntry(new ZipEntry(base));//创建新的接入点
FileInputStream in = new FileInputStream(f);
int b ;
System.out.println(base);
while((b=in.read())!=-1) {//如果没有到流的尾部
out.write(b);//将字节写入当前zip条目
}
in.close();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Myzip book = new Myzip();//创建本类对象
try {
book.zip("D:/mmm.zip", new File("D:/hello"));//调用方法
System.out.println("压缩完成");
}catch(Exception e) {
}
}
}
@1825273284
2018-07-03 22:50
字数 7346
阅读 1