??xml version="1.0" encoding="utf-8" standalone="yes"?> import java.io.*Q?/p>
public class IOStreamDemo { public void samples() throws IOException { //1. q是从键盘读入一行数?q回的是一个字W串 //2. q是从文件中逐行d数据 BufferedReader in = new BufferedReader(new FileReader("IOStreamDemo.java"))Q?br />
String s, s2 = new String()Q?br />
while((s = in.readLine())!= null) } 对于上面的例子,需要说明的有以下几点: 1. BufferedReader是Reader的一个子c,它具有缓冲的作用Q避免了频繁的从物理讑֤中读取信息。它有以下两个构造函敎ͼ BufferedReader(Reader in) q里的sz是指定缓冲区的大?/p>
它的基本ҎQ?/p>
void close() //关闭?/p>
void mark(int readAheadLimit) //标记当前位置 boolean markSupported() //是否支持标记 int read() //l承自Reader的基本方?/p>
int read(char[] cbuf, int off, int len) //l承自Reader的基本方?/p>
String readLine() //d一行内容ƈ以字W串形式q回 void reset() //重设到最q的一个标?/p>
long skip(long n) //跌指定个数的字W读?/p>
2. InputStreamReader是InputStream和Reader之间的桥梁,׃System.in是字节流Q需要用它来包装之后变ؓ字符供lBufferedReader使用?/p>
q句话体CJava输入输出pȝ的一个特点,Z辑ֈ某个目的Q需要包装好几层。首先,输出目的地是文gIODemo.outQ所以最内层包装的是 FileWriterQ徏立一个输出文 件流Q接下来Q我们希望这个流是缓冲的Q所以用BufferedWriter来包装它以达到目的,最后,我们需要格式化输出l果Q于是将PrintWriter包在最外层?/p>
import java.io.*Q?/p>
public class Redirecting { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader( new InputStreamReader(System.in))Q?br />
String sQ?br />
while((s = br.readLine()) != null) 在这里java.lang.System的静态方?/p>
static void setIn(InputStream in) 提供了重新定义标准输入输出流的方法,q样做是很方便的Q比如一个程序的l果有很多,有时候甚臌页昄Q这样不便于观看l果Q这是你可以将标准输出定义ؓ 一个文件流Q程序运行完之后打开相应的文件观看结果,q观了许多?/p>
多灵zd变的功能是由它们的子cL扩充完成的。知道了Java输入输出的基本层ơ结构以后,本文在这里想l大家一些以后可以反复应用例子,对于所有子cȝl节及其功能q不详细讨论?/p>
BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in))Q?
System.out.print("Enter a line:")Q?br />
System.out.println(stdin.readLine())Q?/p>
s2 += s + "\n"Q?br />
in.close()Q?/p>
//3. q是从一个字W串中逐个d字节
StringReader in1 = new StringReader(s2)Q?br />
int cQ?br />
while((c = in1.read()) != -1)
System.out.print((char)c)Q?/p>
//4. q是一个字W串写入文g
try {
BufferedReader in2 = new BufferedReader(new StringReader(s2))Q?br />
PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out")))Q?br />
int lineCount = 1Q?br />
while((s = in2.readLine()) != null )
out1.println(lineCount++ + ": " + s)Q?br />
out1.close()Q?br />
} catch(EOFException e) {
System.err.println("End of stream")Q?br />
}
}
BufferedReader(Reader in, int sz)
boolean ready() //判断是否已l做好读入的准备
3. PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out")))Q?/p>
Java提供了这样一个功能,标准的输入输出{向,也就是说Q我们可以将某个其他的流设ؓ标准输入或输出流Q看下面q个例子Q?/p>
PrintStream console = System.outQ?br />
BufferedInputStream in = new BufferedInputStream( new FileInputStream( "Redirecting.java"))Q?br />
PrintStream out = new PrintStream( new BufferedOutputStream( new FileOutputStream("test.out")))Q?br />
System.setIn(in)Q?br />
System.setOut(out)Q?/p>
System.out.println(s)Q?br />
out.close()Q?
System.setOut(console)Q?br />
}
}
static void setOut(PrintStream out) package com.Gavin.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
/**
* **********************************************
*
* @description 在文件后q加内容
* @author Gavin.lee
* @date Jul 14, 2009 3:25:58 PM
* @version 1.0 **********************************************
*/
public class FileAdd {
/**
* public FileOutputStream(String fileName,
boolean append)
throws FileNotFoundException
*/
public void fileAdd(String absolutePath, String content, boolean isAdd) {
if(content == null) {
return;
}
try {
FileOutputStream fos = new FileOutputStream(new File(absolutePath), isAdd);
fos.write(content.getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* public FileWriter(String fileName,
boolean append)
throws IOException
*/
public void fileAdd2(String absolutePath, String content, boolean isAdd) {
try {
FileWriter fw = new FileWriter(absolutePath, isAdd);
PrintWriter pw = new PrintWriter(fw);
pw.println(content);
pw.close () ;
fw.close () ;
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* public RandomAccessFile(File file,
String mode)
throws FileNotFoundException
含意 ?br />
"r" 以只L式打开。调用结果对象的M write Ҏ都将D抛出 IOException?nbsp;
"rw" 打开以便d和写入。如果该文g不存在Q则试创徏该文件?nbsp;
"rws" 打开以便d和写入,对于 "rw"Q还要求Ҏ件的内容或元数据的每个更新都同步写入到底层存储设备?nbsp;
"rwd" 打开以便d和写入,对于 "rw"Q还要求Ҏ件内容的每个更新都同步写入到底层存储讑֤?nbsp;
*/
public void fileAdd3(String absolutePath, String content, String mode) {
try {
RandomAccessFile rf = new RandomAccessFile(absolutePath, mode);
rf.seek(rf.length()); //指针移动到文g末尾
rf.writeBytes(content);
rf.close();//关闭文g?nbsp;
}catch (IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
FileAdd fa = new FileAdd();
fa.fileAdd("d:\\abc.txt", "test content", true);
}
}
]]>
]]>package com.Gavin.tools.fileoper;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* **********************************************
* @description 删除指定目录下的I文件夹
* 在清除项目业务日志文件时会经帔R?br />
* @author Gavin.lee
* @date Jun 27, 2009 12:24:55 PM
* @version 1.0
***********************************************
*/
public class DeleteNullDirectory {
/**
* 列出某文件夹下的I文件夹l对路径Q储存至list
* @param root
* @return
*/
public List<File> getAllNullDirectorys(File root) {
List<File> list = new ArrayList<File>();
File[] dirs = root.listFiles();
if (dirs != null) {
for (int i = 0; i < dirs.length; i++) {
if (dirs[i].isDirectory()) {
System.out.println("name:" + dirs[i].getPath());
list.add(dirs[i]);
}
getAllNullDirectorys(dirs[i]);
}
}
return list;
}
//删除操作
public void removeNullFile(List<File> list) {
for (int i = 0; i < list.size(); i++) {
File temp = list.get(i);
if (temp.isDirectory() && temp.listFiles().length <= 0) {
temp.delete();
}
}
}
public static void main(String[] args) {
DeleteNullDirectory m = new DeleteNullDirectory();
List<File> list = m.getAllNullDirectorys(new File("e:/test"));
System.out.println(list.size());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getPath());
}
m.removeNullFile(list);
}
}
]]>
其实log4j的记录不仅仅是记录到consoleQfileQ还可以到mailQjdbc?br />
根Logger的配|:讄输出的优先Qlog4j.rootLogger = [ level ] , appenderName, appenderName, …
### global config ###
# log level: DEBUG<INFO<WARN<ERROR<FATAL
log4j.rootLogger=DEBUG,console,file
### appender of console ###
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p %5r %c] ->Thread:%t -file:%F -line:%L -content:%m%n
### appender of file ###
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=c:/exam.log
log4j.appender.file.MaxFileSize=100KB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p %5r %d{yyyy-MM-dd HH\:mm\:ss.SSS} %c] -> -%F%L -%m%n
log4j.rootLogger=DEBUG,CONSOLE,DATABASE,FILE
log4j.addivity.org.apache=true
# 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Encoding=GBK
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 用于数据?br />
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:oracle:thin:@90.0.12.20:1521:ORCL
log4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.DATABASE.user=Nation
log4j.appender.DATABASE.password=1
log4j.appender.CONSOLE.Threshold=WARN
log4j.appender.DATABASE.sql=INSERT INTO LOG4J(stamp,thread, infolevel,class,messages) VALUES ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
# INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
# 写入数据库中的表LOG4J的Message字段中,内容QdQ日期)%c: 日志信息所在地Q类名)%p: 日志信息U别%m: 产生的日志具体信?%n: 输出日志信息换行
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 每天新徏日志
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=C:/log4j/log
log4j.appender.A1.Encoding=GBK
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n
#应用于文?br />
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=C:/log4j/file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.Encoding=GBK
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 应用于文件回?br />
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.CONSOLE_FILE.Encoding=GBK
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#自定义Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#应用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# 发送日志给邮g
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n