共计 6423 个字符,预计需要花费 17 分钟才能阅读完成。
过来的文件流输入写法:
File f=new File("/Users/buxuesong/Documents/svn_code/demo/test.txt");
//OutputStream
OutputStream output = new FileOutputStream(f);
byte byteVal = 100;
output.write(byteVal);
byte[] byteBuff = {0,63,127};
output.write(byteBuff);
output.flush();
output.close();
//Writer
Writer writer = new FileWriter(f,true);
char charVal = 'a';
writer.write(charVal);
char[] charBuff = {'a','b','c'};
writer.write(charBuff);
过来文件流输出写法:
File f=new File("/Users/buxuesong/Documents/svn_code/demo/test.txt");
//InputStream
InputStream input = new FileInputStream(f);
int intVal;
while((intVal = input.read())>=0){byte byteVla = (byte) intVal;
System.out.println(byteVla);
}
input = new FileInputStream(f);
int length;
byte[] byteBuff = {1,2,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4};
while((length = input.read(byteBuff))>=0){for(int i = 0;i<length;i++){byte byteVal = byteBuff[i];
System.out.println(byteVal);
}
}
//Reader
Reader reader = new FileReader(f);
while ((intVal = reader.read())>=0){char charVal = (char) intVal;
System.out.println(charVal);
}
reader = new FileReader(f);
char[] charBuff = {'a','b','c'};
while((length = reader.read(charBuff))>=0){for(int i=0;i<length;i++){char charVal = charBuff[i];
System.out.println("==="+charVal);
}
}
try with resource 写法
try(BufferedReader br = new BufferedReader(new FileReader("/Users/buxuesong/Documents/svn_code/demo/test.txt"))){while ((intVal = br.read())>=0){char charVal = (char) intVal;
System.out.println("BufferedReader"+charVal);
}
}
try(BufferedReader br = new BufferedReader(new FileReader("/Users/buxuesong/Documents/svn_code/demo/testBufferedWriter.txt"))){
String inValue;
while((inValue = br.readLine())!=null){System.out.println("inValue"+inValue);
}
}
新的输入输出写法:
try(BufferedReader br = Files.newBufferedReader(Paths.get("/Users/buxuesong/Documents/svn_code/demo/testBufferedWriter.txt"))){
String inValue;
while((inValue = br.readLine())!=null){System.out.println("Files.newBufferedReader="+inValue);
}
}
List<String> lines = Files.readAllLines(Paths.get("/Users/buxuesong/Documents/svn_code/demo/testBufferedWriter.txt"));
for(String line:lines)System.out.println("Files.readAllLines=="+line);
try(BufferedWriter bw = Files.newBufferedWriter(Paths.get("/Users/buxuesong/Documents/svn_code/demo/testNewBufferedWriter.txt"))){for(String d:data){bw.write(d);
bw.newLine();}
}
Zip 压缩文件写法:
public class ZipFileTest {public static void main(String args[]){String[] data ={
"Line 1",
"Line 2 2",
"Line 3 3 3",
"Line 4 4 4 4",
"Line 5 5 5 5 5"
};
try(FileSystem zipFs = openZip(Paths.get("/Users/buxuesong/Documents/svn_code/demo/myData.zip"))){copyToZip(zipFs);
writeToFileInZip1(zipFs,data);
writeToFileInZip2(zipFs,data);
}catch (Exception e){System.out.println(e.getClass().getSimpleName()+"-"+e.getMessage());
}
}
private static FileSystem openZip(Path zipPath) throws IOException,URISyntaxException {Map<String,String> providerProps = new HashMap<>();
providerProps.put("create","true");
URI zipUri = new URI("jar:file",zipPath.toUri().getPath(),null);
FileSystem zipFs = FileSystems.newFileSystem(zipUri, providerProps);
return zipFs;
}
private static void copyToZip(FileSystem zipFs) throws IOException{Path sourceFile = Paths.get("/Users/buxuesong/Documents/svn_code/demo/test.txt");
// Path sourceFile = .getDefault().getPath("/Users/buxuesong/Documents/svn_code/demo/test.txt");
Path destFile = zipFs.getPath("/file1Copied.txt");
Files.copy(sourceFile,destFile, StandardCopyOption.REPLACE_EXISTING);
}
private static void writeToFileInZip1(FileSystem zipFs, String[] data) throws IOException{try(BufferedWriter bw = Files.newBufferedWriter(zipFs.getPath("/newFile1.txt"))){for(String d:data){bw.write(d);
bw.newLine();}
}
}
private static void writeToFileInZip2(FileSystem zipFs, String[] data) throws IOException{Files.write(zipFs.getPath("/newFile2.txt"), Arrays.asList(data),
Charset.defaultCharset(), StandardOpenOption.CREATE);
}
}
Writer
output 类型
Disk:FileWrite
In-Memory:CharArrayWriter
StringWriter, 写入 StringBuffer
行为类型:
BufferedWriter
PrintWriter
StandardOpenOption 类型
WRITE,APPEND 写入
CREATE,CREATE_NEW,创立,创立新的
DELETE_ON_CLOSE,实现后删除(临时文件)
try(BufferedWriter bw = Files.newBufferedWriter(Paths.get("/Users/buxuesong/Documents/svn_code/test.txt")
,StandardOpenOption.CREATE,StandardOpenOption.WRITE)){PrintWriter pw = new PrintWriter(bw);
pw.write("Hello World!\n");
pw.printf("W:%4d X:%4d\n",5,235);
Calendar cl = Calendar.getInstance();
cl.set(1987,11,23);
pw.printf(Locale.US,"I birthed on %1$tB %1$tA %1$tY",cl);
}catch (IOException e){
}
// 输入文件
Hello World!
W: 5 X: 235
I birthed on December Wednesday 1987
Reader 办法
// 敞开流并开释与其关联的所有系统资源。abstract void close()
// 标记流中的以后地位。void mark(int readAheadLimit)
// 判断此流是否反对 mark()操作。boolean markSupported()
// 返回不读取任何字符的新 Reader。static Reader nullReader()
// 读一个字符。int read()
// 将字符读入数组。int read(char[] cbuf)
// 将字符读入数组的一部分。abstract int read(char[] cbuf, int off, int len)
// 尝试将字符读入指定的字符缓冲区。int read(CharBuffer target)
// 判断此流是否能够读取。boolean ready()
// 重置流。void reset()
// 跳过字符。long skip(long n)
// 读取此阅读器中的所有字符,并依照读取的程序将字符写入给定的编写器。long transferTo(Writer out)
DataOutputSteam & DataInputStream
public static void main(String[] args) {try(OutputStream out = Files.newOutputStream(Paths.get("C:\\Users\\Xuesong.Bu\\Desktop\\a.txt"))){DataOutputStream dos = new DataOutputStream(out);
dos.writeInt(1);
dos.writeLong(2222L);
dos.writeDouble(1.23);
dos.writeChar('H');
dos.writeUTF("hha");
}catch (Exception e){e.printStackTrace();
}
try(InputStream in = Files.newInputStream(Paths.get("C:\\Users\\Xuesong.Bu\\Desktop\\a.txt"))){DataInputStream dis = new DataInputStream(in);
int a = dis.readInt();
System.out.println(a);
Long b = dis.readLong();
System.out.println(b);
Double c = dis.readDouble();
System.out.println(c);
char d = dis.readChar();
System.out.println(d);
String e = dis.readUTF();
System.out.println(e);
}catch (Exception e){e.printStackTrace();
}
}
// 输入
1
2222
1.23
H
hha
Files 循环读取文件夹下子目录及文件
Path path = Paths.get("/Users/buxuesong/Documents");
FileVisitor<Path> fileVisitor = new FileVisitor<Path>(){
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {return FileVisitResult.CONTINUE;}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
fileCount ++;
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {return FileVisitResult.CONTINUE;}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {return FileVisitResult.CONTINUE;}
};
Files.walkFileTree(path, fileVisitor);
System.out.println(fileCount);
// 另外几种循环读取所有文件个数
Path path = Paths.get("/Users/buxuesong/Documents/python-learn/ch01");
Stream<Path> stream = Files.walk(path);
System.out.println(Files.walk(path)
.filter(Files::isDirectory)
.count());
System.out.println(Files.walk(path)
.filter(Files::isRegularFile)
.count());
System.out.println(stream.count());
正文完