java File (文档流)
一、 数据流的基本概念
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<sw.length();i++){ if(!Character.isDigit(sw.charAt(i))){
return true;
}
return false;
}
return false;
} }
java File (文档流)的更多相关文章
- CSS文档流与块级元素和内联元素
		CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ... 
- CSS文档流与块级元素和内联元素(文档)
		CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不 少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指 南> ... 
- 从文档流来看内联元素和块元素的css排版
		veda原创[抄录]讲得很好存自己这里看 从文档流来看内联元素和块元素的css排版 CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的 ... 
- CSS文档流、块级元素、内联元素
		CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ... 
- 使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,
		一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ... 
- 4、前端--浮动、定位、是否脱离文档流、溢出属性、z-index、透明度、JavaScript简介
		浮动 # ps:html代码时没有缩进一说的 全部写在一行也可以 """浮动主要就是用于页面布局的!!!""" # 浮动带来的负面影响 &q ... 
- 【H5疑难杂症】脱离文档流时的渲染BUG
		BUG重现 最近机票团队在一个页面布局复杂的地方发现一个BUG,非常奇怪并且不好定位,这类问题一般最后都会到我这里,这个问题是,改变dom结构,页面却不渲染!!! 如图所示,我动态的改变了dom结构, ... 
- Html文档流和文档对象模型DOM理解
		前言 在理解浮动和定位时,触碰到文档流概念.为了更好理解浮动和定位,学习了文档流和DOM(文档对象模型). 正文 DOM(文档对象模型)简单理解就是编写的html页面所有内容构成的树形结构.例如: 根 ... 
- html/css基础篇——DOM中关于脱离文档流的几种情况分析
		所谓的文档流,指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列.并最终窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素.脱离文档流即是元素打乱了这个排列,或是从排版中拿走. ... 
随机推荐
- 新人学PHP,认为手动搭建环境而苦恼吗?这篇文章告诉你多简单!
			本教程适用于初学PHP,想了解手动搭建PHP环境的童鞋. 一键环境和高手勿喷. 本教程以下列版本软件为例: 所需软件目录 我在这里的目录结构是(个人习惯) 安装与配置 apache 双击安装Apach ... 
- jQuery动态添加li标签并添加属性和绑定事件
			代码如下: <%@page import="java.util.ArrayList"%> <%@ page language="java" c ... 
- 3ds max启动慢怎么办?
			有时候启动3ds max的时候一直卡在启动界面进不去怎么办? 在百度上搜到了下面这个解决方案,试了下还真有用: 具体就是进到这个文件夹,然后分别进入第一个和第三个文件夹删掉autodesk ... 
- UVA 167 R-The Sultan's Successors
			https://vjudge.net/contest/68264#problem/R The Sultan of Nubia has no children, so she has decided t ... 
- 【Docker 教程】- Docker 架构
			1.Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. 2.Docker 容器通过 Docker 镜像来创建. 3.容器与镜像的关系类似于面向对象编程 ... 
- PL/SQL在 win8.1系统下连接Oracle11g没有database处理方法(亲身实验,吐血分享)
			一.问题 这里首先说明下我的环境:win8.1(64bit)+oracle11g(64bit)+PL/SQL(32bit).状况是:net manager正常配置,测试也成功,但是用PL/SQL连接的 ... 
- [计算机网络-应用层] DNS:因特网的目录服务
			我们知道有两种方式可以识别主机:通过主机名或者IP地址.人们喜欢便于记忆的主机名标识,而路由器则喜欢定长的.有着层次结构的IP地址.为了折中这些不同的偏好,我们需要一种能进行主机名到IP地址转换的目录 ... 
- BZOJ 1263 整数划分(数学+高精度)
			我们不妨考虑可以划分为实数的情况,设划分为x份实数,使得总乘积最大. 易得当每一份都相等时乘积最大.即 ans=(n/x)^x. 现在只需要求出这个函数取得最大值的时候x的取值了. 两边取对数,则有l ... 
- 【bzoj2073】[POI2004]PRZ  状态压缩dp
			题目描述 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时只能分批 ... 
- Necklace - CF613C
			Ivan wants to make a necklace as a present to his beloved girl. A necklace is a cyclic sequence of b ... 
