一、   数据流的基本概念

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,刷新流中的数据去目的地,然后流关闭。

四.(java)中file类的常用方法

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 (文档流)的更多相关文章

  1. CSS文档流与块级元素和内联元素

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...

  2. CSS文档流与块级元素和内联元素(文档)

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不 少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指 南> ...

  3. 从文档流来看内联元素和块元素的css排版

    veda原创[抄录]讲得很好存自己这里看 从文档流来看内联元素和块元素的css排版 CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的 ...

  4. CSS文档流、块级元素、内联元素

    CSS文档流与块级元素(block).内联元素(inline),之前翻阅不少书籍,看过不少文章, 看到所多的是零碎的CSS布局基本知识,比较表面.看过O'Reilly的<CSS权威指南>, ...

  5. 使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,

    一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ...

  6. 4、前端--浮动、定位、是否脱离文档流、溢出属性、z-index、透明度、JavaScript简介

    浮动 # ps:html代码时没有缩进一说的 全部写在一行也可以 """浮动主要就是用于页面布局的!!!""" # 浮动带来的负面影响 &q ...

  7. 【H5疑难杂症】脱离文档流时的渲染BUG

    BUG重现 最近机票团队在一个页面布局复杂的地方发现一个BUG,非常奇怪并且不好定位,这类问题一般最后都会到我这里,这个问题是,改变dom结构,页面却不渲染!!! 如图所示,我动态的改变了dom结构, ...

  8. Html文档流和文档对象模型DOM理解

    前言 在理解浮动和定位时,触碰到文档流概念.为了更好理解浮动和定位,学习了文档流和DOM(文档对象模型). 正文 DOM(文档对象模型)简单理解就是编写的html页面所有内容构成的树形结构.例如: 根 ...

  9. html/css基础篇——DOM中关于脱离文档流的几种情况分析

    所谓的文档流,指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列.并最终窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素.脱离文档流即是元素打乱了这个排列,或是从排版中拿走. ...

随机推荐

  1. 定点数(fixed-point number)

    定义 定点数(fixed-point number)就是小数点位置固定的数,也就是说,小数点后面的位数是固定的,比如要记录一笔账目,这些账目的数字都不会超过100,就可以使用2位小数位定点数来记录,比 ...

  2. HDU 2068 Choose the best route

    http://acm.hdu.edu.cn/showproblem.php?pid=2680 Problem Description One day , Kiki wants to visit one ...

  3. 如何进行Linux Kernel 开发

    转自:http://www.cppblog.com/flyonok/archive/2011/04/15/144316.html 如何进行Linux Kernel 开发? (Take 3) 译者序:这 ...

  4. (转)Linux NUMA引发的性能问题

    最近某客户的核心业务系统又出了翻译缓慢的情况.该问题在6月份也出现过,当时进行了一次调整. 我们首先来看下故障时间段的awr报告: 单纯的从TOP 5 event,基本上是看不出任何东西的,可能有人会 ...

  5. AndroidStudio3.0 注解报错Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor.

    把Androidstudio2.2的项目放到3.0里面去了,然后开始报错了. 体验最新版AndroidStudio3.0 Canary 8的时候,发现之前项目的butter knife报错,用到注解的 ...

  6. MySQL & export

    MySQL & export mysql export table form command line https://cn.bing.com/search?q=mysql%20export% ...

  7. delphi7中 OnDrawColumnCell 事件怎么用

    你问的这个事件应该是dbgrid控件中的吧?这个事件是在grid控件载入数据的时候触发的,至于你这个“怎么用”波及的范围太大了,呵呵!不知道如何说起!另外还是发一段相关的代码吧,这也是我之前提过问题, ...

  8. BZOJ2223:[Coci2009]PATULJCI——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2223 Description Sample Input 10 3 1 2 1 2 1 2 3 2 3 ...

  9. UVA.548 Tree(二叉树 DFS)

    UVA.548 Tree(二叉树 DFS) 题意分析 给出一棵树的中序遍历和后序遍历,从所有叶子节点中找到一个使得其到根节点的权值最小.若有多个,输出叶子节点本身权值小的那个节点. 先递归建树,然后D ...

  10. 【DP】【P2734】游戏 A Game

    传送门 Description 有如下一个双人游戏:N个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结 ...