博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java File (文档流)
阅读量:6897 次
发布时间:2019-06-27

本文共 22745 字,大约阅读时间需要 75 分钟。

一、   数据流的基本概念

1.数据流

在Java中把不同的数据源与程序之间的数据传输都抽象表述为“流”(stream),以实现相对统一和简单的输入/输出操作方式。传输中的数据就像流水一样,也称为数据流。

2 .I/O数据流的分类方式

数据流分为输入流和输出流两类。输入流只能读取不能写。而输出流只能写不能读。(这里站在程序的角度来确定出入方向,即将数据从程序外部传送到程序中谓之“输入”数据,将程序中的数据传送到外部谓之“输出”数据。

3.缓冲流(Buffered Stream)

对数据流的每次操作都是以字节为单位进行的,既可以向输出流写入一个字节,也可从输入流中读取一个字节。显然效率太低,通常使用缓冲流,即为一个流配置一个缓冲区,一个缓冲区就是专门传送数据的一块内存。

4.数据源(Data Sourcc):是指那些能够提供数据的地方,包括键盘、磁盘文件、网络接口等。

5.数据宿(Data Sink):指能够接收数据的地方,可以是磁盘文件、网络接口以及显示器、打印机等外部设备。(数据宿也可认为是数据传输的目的地)

二、节点流和处理流

根据数据流所关联的是数据源还是其他数据流,可分为节点流(Node Stream)和处理流(Processing Stream)

节点流可以从/向一个特定的地方读/写数据。

处理流是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现增强的数据读/写功能,处理流并不直接连接到数据源。

 

三、   字符流

1.字符输入流Reader

Reader类为所有面向字符的输入流的超类,声明为java.io中的抽象类。

public int read():读取一个字符,返回的是读到的那个字符。如果读到流的末尾,返回-1。

public int read(char[] cbuf):将读到的字符存入指定的数组中,返回的是实际读取的字符数。如果读到流的末尾,返回-1。

public abstract int read(char[] cbuf,int off,int len):将读到的字符存入数组的指定位置(off),每次最多读len个字符,返回实际读取的字符数。如果读到流的末尾,返回-1。

close():读取字符其实用的是window系统的功能,使用完毕后,进行资源的释放。

 

2.字符输出流writer

Weiter类为所有面向字符的输出流的超类,声明为java.io中的抽象类。

public void write(int c):将一个字符写入到流中。

public void write(char[]):将数组中的字符依次写出。

public abstract void write(char[] bcbuf,int off,int len):将数组中下标off开始的len个字符写出。

public void write(String):将一个字符串写入到流中。

public abstract void flush():刷新流,将流中的数据刷新到目的地中,流还存在。

public abstreact void close():关闭资源,关闭前会先调用flush,刷新流中的数据去目的地,然后流关闭。

四.

File():构造函数,一般是依据文件所在的指定位置来创建文件对象。  

CanWrite():返回文件是否可写。  
CanRead():返回文件是否可读。 
CompareTo(File pathname):检查指定文件路径间的顺序。 
Delet():从文件系统内删除该文件。 
DeleteOnExit():程序顺利结束时从系统中删除文件。 
Equals(Object obj):检查特定对象的路径名是否相等。 
Exists():判断文件夹是否存在。 
GetAbsoluteFile():返回文件的完整路径。 
GetAbsolutePath():返回文件的完整路径。 
GetName():返回文件名称。 
GetParent():返回文件父目录路径。 
GetPath():返回文件的潜在相对路径。 
GetParentFile():返回文件所在文件夹的路径。 
HashCode():返回文件哈希码。 
IsDirectory():判断该路径指示的是否是文件。 
IsFile():判断该路径指示的是否是文件。 
LastModified() :返回文件的最后修改时间标志。 
Length():返回文件长度。 
List():返回文件和目录清单。 
Mkdir():生成指定的目录。 
RenameTo(File dest):更名文件。 
SetReadOnly():将文件设置为可读。 
ToString():返回文件状态的字符串。 
ToURL():将文件的路径字符串转换成URL 
File.GetCreationTime 读取创建时间 
file.SetCreationTime 设置创建时间 
File.GetLastAccessTime   读取最后访问时间 
File.SetLastAccessTime   设置最后访问时间 
File.GetLastWriteTime 读取最后修改时间 
File.SetLastWriteTime 设置最后修改时间 
File.GetAttributes 读取文件属性 

File.SetAttributes 设置文件属性

4.1  判断方法

  1 boolean canExecute()  判断文件是否可以执行

  2 boolean canRead() 判断文件是否可读

  3 boolean canWrite() 判断文件是否可写

  4 boolean exist() 判断文件是否存在

  5 boolean isDirectory() 判断文件是目录

  6 boolean isFile() 判断是否是文件

  7 boolean canHidden() 判断文件是否可见

  8 boolean isAbsolute() 判断文件是否是绝对路劲 ,文件不存在也能判断

 

 4.2获取方法

 1.String getName()

 2.String getPath()
 3.String getAbsolutePath()
 4.String getParent()//如果没有父目录返回null
 5.long lastModified()//获取最后一次修改的时间
 6.long length()
 7.boolean renameTo(File f)
 8.File[] liseRoots()//获取机器盘符
9.String[] list()
10.String[] list(FilenameFilter filter)

 

五。代码实例方法使用:

package com.rimi.week6_1;

import java.io.BufferedReader;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Date;

public class Test1 {

public static void main(String[] args) {
String fName="889923,txt";
//fw(fName,"afiokjh");
//fw("book.txt","abacedfawgajppjp1234569");
//fr( "book.txt");
//fr2( fName);
//fd( "book.txt");

// fw("s8c.txt","woaibijxjijs");

// fw("des.txt","123");
//copyContent( "s8c.txt", "des.txt");
//fw("sb.txt","w123");
//appendContent("sb.txt","woqisilile ");
//tempFile();
//fw("123.txt","woaibaoxoe");
//changeDate();
//getFileSize("wqe.txt","sfwofio");
//changeName();
// changeChmod();
//ifExist("weo");
//createDir("/Users/rimi/Desktop/1/2/3/4/5/6");
//delete("/Users/rimi/Desktop/1");
// createDir( "/Users/rimi/Desktop/.j1702");//创建隐藏文件
//isHidden("/Users/rimi/Desktop/.j1702");//判断是不是隐藏文件

int index=0;

// printDirsStruct("/Users/rimi/Desktop/java1702",index);
//printFile("/Users/rimi/Desktop/java1702");
//FileDemo3 ();
FileDemo5 ();
}
public static void printFile(String fileName){
File file =new File (fileName);//返回由此抽象路径名表示的文件或目录的名称。
if(file.isDirectory()){
System.out.println(fileName+file.isDirectory());
}
System.out.println(file.getName());
for (String se : file.list()) {
File qu=new File(se);
System.out.println("文件结构:"+qu);
}
}

 

 

//打印文件的目录结构
public static void printDirsStruct(String fileName,int index){
File file =new File(fileName);
System.out.println(fileName+file.isDirectory());
if(file.isDirectory()){
for(int i=0;i<index;i++){
System.out.print("_");
}
System.out.println(file.getName());
for (String su : file.list()) {
String newfile=fileName+"/"+su;
File fq=new File(newfile);
// System.out.println("目录结构:"+newfile);
if(fq.isDirectory()){
printDirsStruct(newfile,(index+2));
}
}
}
}

 

//判断是不是隐藏文件
public static void isHidden(String fileName){
File file =new File (fileName);
if(file.isHidden()){
System.out.println(file+"是隐藏文件吗?"+file.isHidden());
}
}

 

//递归删除目录

public static void delete(String path){

File file=new File(path);//打开这个file文件
if(file.isDirectory()){
//2.判断这个file是不是目录
if(file.list().length>0){
//3.如果是目录,判断里面还有没有子目录
for (String fw : file.list()) {
//4.如果有子目录就继续调用本方法
String arr=path+"/"+fw;
System.out.println("arr"+arr);
delete(arr);//调用本身的时候就停止下面的代码执行
}
}
}
if(file.delete()){//如果
System.out.println(path+"目录删除成功");
}
}

 

//创建目录
public static void createDir(String path){
File file =new File (path);
//file.mkdir();创建单个目录
//System.out.println("成功创建目录"+path+file.mkdirs());
if(file.mkdirs()){
System.out.println("创建目录成功");
}else{
System.out.println("创建目录失败");
}
}

 

//判断文件和目录是否存在

//file.exists()句柄,检测文件是否存在
public static void ifExist(String fileName){
try{
File file=new File(fileName);
System.out.println(fileName+"文件存在吗?"+file.exists());
}catch(Exception e){
}
}

//设置文件只读
public static void changeChmod() {
try {
File file=new File("sb.txt");
System.out.println("设置文件为只读成功了吗?"+file.setReadOnly());
System.out.println("文件可以写入吗?"+file.canWrite());
}catch(Exception e){
}
}

//文件的重命名

public static void changeName() {
try {
File oldName = new File("123.txt");
File newName=new File("wer.txt");
if(oldName.renameTo(newName)) {
System.out.println("已 重命名");
}else {
System.out.println("Error");
}
}catch(Exception e) {
}
}

 

//获取文件的大小
//fw.isFile()测试此抽象路径名表示的文件是否是一个标准文件
//fw.exists()判断这个文件存不存在
public static void getFileSize(String fileName,String content) {
try {
File fw=new File(fileName);
FileWriter fm=new FileWriter(fw);
fm.write(content);
fm.close();
if(!fw.exists()||!fw.isFile() ){
System.out.println("文件不存在");
}
System.out.println(fileName+"的大小是:"+fw.length());
}catch(Exception e) {
}
}

//修改文件最后的修改日期

public static void changeDate(){
try {
File fl = new File("sb.txt");
// fl.createNewFile();
Date filetime = new Date(fl.lastModified());//获取最后修改时间
System.out.println("修改之前"+filetime.toString()); //输出时间
//设置最后修改时间
System.out.println("修改时间是否成功"+fl.setLastModified(System.currentTimeMillis()+1000000));
filetime = new Date(fl.lastModified());//获取最后修改后的最后修改时间
System.out.println("修改之后:"+filetime.toString());
} catch (Exception e) {
// TODO: handle exception
}
}

//创建临时文件

//file.exists()表示判断文件是否存在
public static void tempFile() {
File file=new File("tempTest.txt");
if(file.exists()) {
System.out.println("文件已经存在");
}else {
System.out.println("文件不存在");
try {
FileWriter fw=new FileWriter(file);
fw.write("dfhiowjf");
fw.close();
file.createNewFile();
System.out.println("创建临时文件成功");
file.deleteOnExit();//文件在程序退出的时候被删除
Thread.sleep(10000);//文件显示停留10秒,
}catch(Exception e) {
}
}
}

 

//追加文件内容
public static void appendContent(String fileName,String content) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
bw.write("w123");
bw.close();
bw=new BufferedWriter(new FileWriter(fileName,true));
bw.write(content);
bw.close();
}catch(Exception e){
}
}

//文件内容的复制 src 要被复制的文件, des 接收复制内容的文件

public static void copyContent(String src,String des) {
try {
// 源文件
InputStream in =new FileInputStream(new File(src));
// 目标文件
OutputStream out=new FileOutputStream(new File(des));
//1.创建每次读取的大小
byte[]buf=new byte[100];
int len;
//读写
while((len =in.read(buf))>0) {
out.write(buf,0,len);
}
in.close();
out.close();
}catch(Exception e) {
}
}

//删除文件
//File 文件句柄
public static void fd(String fName) {
try{
// 获取文件句柄
File f=new File(fName);
//判断是否被删除
if(f.delete()) {
System.out.println("文件删除成功");
}else {
System.out.println("文件删除失败");
}
}catch(Exception e) {
}
}

/*读取文件里面的内容
* readLine()读取一个文本行。
BufferedReader 获取文件读取句柄,读取文件内容()
*/
public static void fr2(String fName) {
try {
FileReader fr=new FileReader(fName);
BufferedReader br =new BufferedReader(fr);
String str;
while ((str=br.readLine())!=null){
System.out.println(str);
}
br.close();//关流
fr.close();
}catch(IOException e) {
}
}

 

//读取文件里面的内容

//FileReader 文件读句柄
//fr.read(ca,0,15)ca 表示读取的数组名0表示从什么位置开始读取15表示读取的长度
//“IoException“(流异常,通常用在文件读取中)是”Exception”(用在所有的异常处理中)的一个分支,
//也就是说“Exception”的范围更
public static void fr(String fName) {
try {
FileReader fr=new FileReader(fName);
char[]ca=new char[14];
fr.read(ca, 4, 10);
System.out.println("ca==="+Arrays.toString(ca));
fr.close();
}catch(Exception e) {
e.printStackTrace();
}
}

 

//创建文件名为rtuw.txt内容为afiokjh

public static void fw(String fName, String content) {
try {
FileWriter fw =new FileWriter(fName);
fw.write(content);
fw.close();
}catch(IOException e) {
}
}

// 列出磁盘下的文件和文件夹

public static void FileDemo3 (){
File[] files =File.listRoots();
for(File file:files){
System.out.println(file);
if(file.length()>0){
String[] filenames =file.list();
for(String filename:filenames){
System.out.println(filename);
}
}
}
}
// 利用递归列出所有文件
public static void FileDemo5 (){
File f =new File("/Users/rimi/Desktop");
showDir(f);
}
public static void showDir(File dir){
System.out.println(dir);
File[] files =dir.listFiles();
for(File file:files){
if(file.isDirectory())
showDir(file);
else
System.out.println(file);
}
}

public static void FileDemo4() {

   
        
File[] files =File.listRoots();
        
for
(File file:files){
            
System.out.println(file);
            
if
(file.length()>
0
){
                
String[] filenames =file.list(
new 
FilenameFilter(){
                    
//file 过滤目录 name 文件名
                    
public 
boolean 
accept(File file,String filename){
                        
return 
filename.endsWith(
".mp3"
);
                    
}
                
});
                
for
(String filename:filenames){
                    
System.out.println(filename);
                
}
            
}
        
}
    
 
}

}

 

六。file 文档流综合应用

package com.rimi.week6_1;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.util.Scanner;/* * 基于文件系统存储的 ATM 用户系统 * 功能: 注册,登陆,存钱,取钱,注销 * 1.每一个用户账户创建一个文件 * 2。文件名使用用户名定义 * 3.密码为6位 * 4.最多只能存100万,超过提示钱太多了 * 5.注销的时候要注意,账户里面没有钱 * 6.注册的时候要注意,密码必须为6位 * 7.判断账号是否重复 * 8.取钱要注意余额够不够 * 9.所有操作都可以循环进行 *  */public class NewAtm {        public static void main(String[] args) throws Exception {        System.out.println("********欢迎使用花旗银行*********");        System.out.println("请输入选项:1.注册  2.登陆  ");    Scanner in=new Scanner(System.in);    int function=in.nextInt();    if(function==1){        register();    }    if(function==2){        login();    }}//************注册账号*******************public static void  register()throws Exception{        System.out.println("请输入注册的账号(账号长度为9位数):");    Scanner in=new Scanner(System.in);    String account=in.next();    if(account.length()==9){                    File file =new File(account);            if(!file.exists()){                a1:                while(true){                System.out.println("请输入账户密码(密码的长度为6位):");                String    password=in.next();                if(password.length()==6){                    System.out.println("请再次输入账户密码:");                    String    password1=in.next();                    if(password.equals(password1)){                                    System.out.println("请输入开户金额:");                        String Money=in.next();                        if(!ifCharacter(Money)){                            FileWriter fw = new FileWriter(account);                        BufferedWriter bw = new BufferedWriter(new FileWriter(account,true));                        String account1=account+password+Money;                        bw.write(account1);                        fw.close();                        bw.close();                            System.out.println("恭喜你账号注册成功");                        System.out.println("你的账户信息为:");                        System.out.println("账号为"+account+"\n"+"密码为:"+password+"\n"+"账户余额为:"+Money+"元"+"\n");                        login();                        return;                        }else {                            System.out.println("你输入的不是有效数字!请重新输入:");                            register();                            System.out.println("请选择:1. 退出系统");                            int b=in.nextInt();                            if(b==1) {                                return;                            }                                                }                    }else{                        System.out.println("两次输入的密码不一样");                        continue a1;                    }                }else{                    System.out.println("你输入的账号长度不正确,请重新输入");                    continue a1;                }                                }                                }else{                    System.out.println("你输入的账号已经存在!请选择:1.重新输入  2.登录账号");                    int v=in.nextInt();                    switch(v) {                    case 1:  register();                    break;                    case 2:login();                    break;                    }                }        }    else{        System.out.println("你输入的账号长度不正确,请重新输入!");         register();    }    }//**********登录页面****************public  static void login() throws Exception{        System.out.println("请输入账号:");    Scanner in=new Scanner(System.in);    String account=in.next();        File file =new File(account);    if(file.exists()){        System.out.println("账号存在");            System.out.println("请输入你的密码:");                String newpassword=in.next();                    FileReader fr = new FileReader(account);                             // BufferedReader 创建一个文件内容读取句柄                BufferedReader br = new BufferedReader(fr);                String str = br.readLine();                String s =str.substring(9,15);            fr.close();                    if(s.equals(newpassword)){                                System.out.println("密码验证成功");                longin1(account);            }else{                System.out.println("密码验证失败");                System.out.println("你的账号不存在!1.注册新账号  2.重新输入");                                int function=in.nextInt();                if(function==1){                     register();                }                                if(function==2){                    login();                }            }        }else{        System.out.println("账号不存在!1.注册新账号   2.退出");        int Options=in.nextInt();        if(Options==1){                    register();        }        if(Options==2){            System.out.println("欢迎使用花旗银行!");            return;        }                }    }//************登录页面1************public  static void longin1(String account) throws Exception{    System.out.println("请输入选项:1.查询  2.存钱  3.取钱 4.注销账号  5.修改密码  6.退出系统");    Scanner in=new Scanner(System.in);    int function1=in.nextInt();    if(function1==1){        Inquiry(account);    }    if(function1==2){        saveMoney(account);    }    if(function1==3){        drawMoney(account);    }    if(function1==4){        writeOff(account);    }    if(function1==5){        ChangePassword( account );    }            if(function1==6) {        System.out.println("欢迎使用花旗银行!");        return;    }}    //*************查询***********    public static void  Inquiry(String account) throws Exception{    FileReader fr = new FileReader(account);        // BufferedReader 创建一个文件内容读取句柄        BufferedReader br = new BufferedReader(fr);        String str = br.readLine();        String s =str.substring(15,str.length());        System.out.println("账户余额为:"+s);    fr.close();    System.out.println("请选择: 1.返回  2.退出系统");     Scanner in=new Scanner (System.in );    int Options1=in.nextInt();    if(Options1==1){            longin1( account);     }    if(Options1==2){        System.out.println("欢迎使用花旗银行!");    }}    //***********存钱******************public  static void saveMoney( String account) throws Exception{    Scanner in=new Scanner(System.in);    System.out.println("请存入金额(最多存入100万):");    String newMoney=in.next();        if(!ifCharacter(newMoney)){                        Double cMoney = Double.valueOf(newMoney);            if(cMoney>1000000){                System.out.println("对不起!你输入的金额已经超限!");                System.out.println("请选择:1.重新输入  2.返回");             int b=in.nextInt();            switch(b){            case 1:saveMoney( account);            break;            case 2:                longin1(account);                break;            }                            }else{             cMoney = Double.valueOf(newMoney);                        FileReader fr = new FileReader(account);                         // BufferedReader 创建一个文件内容读取句柄            BufferedReader br = new BufferedReader(fr);            String str = br.readLine();            String s2 =str.substring(0,15);            String s =str.substring(15,str.length());        fr.close();        try {                        Double b = Double.valueOf(s);            Double    Money1=cMoney+b;            String Money2 = String.valueOf(Money1);            BufferedWriter bv = new BufferedWriter(new FileWriter(account));                        bv.write(s2+Money2);            bv.close();                System.out.println("存钱已经完成!");                             System.out.println("账户余额为:"+Money1);            fr.close();                        System.out.println("请选择:1.返回 2.退出系统");            int u=in.nextInt();            if(u==1){             longin1(account);            }            if(u==2){                System.out.println("欢迎使用花旗银行!");                }        } catch (NumberFormatException e) {            e.printStackTrace();        }            }        }else{            System.out.println("你输入的不是有效数字,请重新输入!");            saveMoney(account);        }    }//*************取款******************public  static void drawMoney(String account) throws Exception{        Scanner in=new Scanner(System.in);    System.out.println("请输入取款金额:");    String newMoney1=in.next();        if(!ifCharacter(newMoney1)){                        Double cMoney1 = Double.valueOf(newMoney1);            FileReader fr = new FileReader(account);                         // BufferedReader 创建一个文件内容读取句柄            BufferedReader br = new BufferedReader(fr);            String str = br.readLine();            String s2 =str.substring(0,15);            String q =str.substring(15,str.length());            fr.close();            br.close();            Double OldMoney = Double.valueOf(q);            if(cMoney1>OldMoney){                System.out.println("对不起!你金额不足!");                System.out.println("请选择:1.重新输入  2.返回");             int b=in.nextInt();            switch(b){            case 1: drawMoney( account);            break;            case 2:                longin1(account);                break;            }                            }else{                    try {                        Double    Money1=OldMoney-cMoney1;            String Money2 = String.valueOf(Money1);            BufferedWriter bv = new BufferedWriter(new FileWriter(account));            bv.write(s2+Money2);            bv.close();            System.out.println("取款已经完成!");            System.out.println("账户余额为:"+Money1);                    fr.close();                                        System.out.println("请选择:1.返回 2.退出系统");                    int u=in.nextInt();                    if(u==1){                     longin1(account);                    }                                        if(u==2){                        System.out.println("欢迎使用花旗银行!");                        }                                                            } catch (NumberFormatException e) {            e.printStackTrace();        }            }        }else{            System.out.println("你输入的不是有效数字,请重新输入!");            saveMoney(account);        }        }//***************注销*************public  static void writeOff(String account) throws Exception{        FileReader fr = new FileReader(account);    BufferedReader br = new BufferedReader(fr);    String str = br.readLine();    String q =str.substring(15,str.length());    fr.close();    br.close();    Double OldMoney = Double.valueOf(q);    if(OldMoney>0) {        System.out.println("你的账户中有余额,不能注销!");        System.out.println("请选择:1.返回     2.退出系统");         Scanner in=new Scanner(System.in);        int b=in.nextInt();        if(b==1){    longin1(account);        }        if(b==2){            System.out.println("欢迎使用花旗银行!");                }                    }else {        try {        File f=new File(account);                 if(f.delete()) {            System.out.println("账户注销成功!");            return;        }else {            System.out.println("账户注销失败!");            return;        }        }catch(Exception e) {                    }    }}public static void ChangePassword(String account ) throws Exception{    System.out.println("请输入原始密码:");    Scanner in=new Scanner (System.in);    String oldPassword=in.next();    FileReader f =new FileReader(account);    BufferedReader bn=new BufferedReader(f);    String  mb =bn.readLine();    String  vn=mb.substring(9,15);    String vn1=mb.substring(0, 9);    String  vn2=mb.substring(15,mb.length());    f.close();    bn.close();    if(oldPassword.equals(vn)){        System.out.println("请输入新密码:");        String  newpass1=in.next();        System.out.println("请再次输入新密码:");        String newpass2=in.next();        if(newpass1.equals(newpass2)){            File file=new File(account);            FileWriter  xin=new FileWriter(file);            xin.write(vn1+newpass1+vn2);            xin.close();            System.out.println("恭喜你密码已修改成功!");            System.out.println("请选择:1.返回上一层   2.退出系统");            int  xu1=in.nextInt();            if(xu1==1){                 longin1(account);            }            if(xu1==2){                System.out.println("欢迎您使用花旗银行!");                return;            }                    }else{            System.out.println("你两次输入的密码不一样!");            System.out.println("请选择:1.重新输入  2.返回上一层");            int xu=in.nextInt();            if(xu==1){                ChangePassword( account );            }            if(xu==2){                 longin1(account);            }        }    }else{        System.out.println("你输入的原始密码有误!请重新输入:");        ChangePassword(account );            }    }public  static boolean ifCharacter(String sw){        for(int i=0;i
View Code

 

转载于:https://www.cnblogs.com/sbj-dawn/p/7140953.html

你可能感兴趣的文章
《Fit for Purpose》作者访谈录
查看>>
与Brian Goetz聊Java的数据类
查看>>
Emoji 上的 Swift:换一种视角来理解 Swift 高阶函数
查看>>
区块链将颠覆游戏业,游戏内商品未来也可带出游戏、自由交易
查看>>
Linux/Mac安装oh-my-zsh后不执行~/.bash_profile、~/.bashrc解决办法
查看>>
安卓开发_深入理解广播机制
查看>>
技术大咖云集,GIAC 2017全球互联网架构大会圆满落幕
查看>>
php取整函数ceil,floor,round,intval函数的区别
查看>>
elk5.x环境搭建与常用插件安装
查看>>
MySQL大表删除导致服务器变慢的分析
查看>>
windows server操作系统一定要关闭开机磁盘自检
查看>>
Java解析Excel文件
查看>>
MySQL数据类型简介
查看>>
由于未预料的错误,现在无法使用nautilus
查看>>
python很low的三级菜单(六)
查看>>
Go语言之Writer 和 Reader
查看>>
linux 位置参数 特殊变量 read grep 变量赋值
查看>>
spool+sql拼接实现导出结果集为csv格式文件
查看>>
【19】Python工资管理系统
查看>>
HAProxy+Keepalived实现Web服务器负载均衡
查看>>