IO流练习
-
复制文本不再重复,前两篇博客中已经实现了很多方法。
-
复制图片: 把 “D:\develop\pic\wangzai.jpg” 复制到 "D:\develop\picCopy\wangzai.jpg"
// 由于是复制图片,所以选用字节流输入输出
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\develop\\pic\\wangzai.jpg"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\develop\\picCopy\\wangzai.jpg"));
byte[] cbuf = new byte[1024];
int len = 0;
while((len = bis.read(cbuf)) != -1){
bos.write(cbuf, 0, len);
bos.flush();
}
bis.close();
bos.close();
}
}
- 复制单极文件夹: 把 “D:\develop\pic” 复制到 "D:\develop\picCopy"
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException{
File file = new File("D:\\develop\\pic");
File newFile = new File("D:\\develop\\picCopy");
newFile.mkdir();
File[] fileList = file.listFiles();
for(File f : fileList){
copy(new File(file, f.getName()), new File(newFile, f.getName()));
}
}
public static void copy(File srcAddr, File destAddr) throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcAddr));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destAddr));
byte[] cbuf = new byte[1024];
int len = 0;
while((len = bis.read(cbuf)) != -1){
bos.write(cbuf, 0, len);
bos.flush();
}
bis.close();
bos.close();
}
}
- 复制多极文件夹: 把 “E:\DW” 复制到 "E:\DWTmp"
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException{
File file = new File("E:\\DW");
File newFile = new File("E:\\DWTmp");
copyDirectory(file, newFile);
}
public static void copyDirectory(File srcAddr, File destAddr) throws IOException{
destAddr.mkdir();
File[] fileList = srcAddr.listFiles();
for(File f : fileList){
if(!f.isDirectory()){ // 如果是文件,则拷贝文件
copy(new File(srcAddr, f.getName()), new File(destAddr, f.getName()));
}
else{ // 如果是文件夹,递归复制文件夹
copyDirectory(new File(srcAddr, f.getName()), new File(destAddr, f.getName()));
}
}
}
public static void copy(File srcAddr, File destAddr) throws IOException{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcAddr));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destAddr));
byte[] cbuf = new byte[1024];
int len = 0;
while((len = bis.read(cbuf)) != -1){
bos.write(cbuf, 0, len);
}
bis.close();
bos.close();
}
}
- 用Reader模拟BufferedReader的readLine()功能
- 同时实现LineNumberReader的特有功能:获取每次读取数据的行号
// MyBufferedReader.java
// 实现readline()功能
import java.io.IOException;
import java.io.Reader;
public class MyBufferedReader {
private Reader r;
public MyBufferedReader(Reader r){
this.r = r;
}
public String readLine() throws IOException{
StringBuilder sb = new StringBuilder();
int ch;
while((ch = r.read()) != -1){
if(ch == '\r')
continue;
else if(ch == '\n') // 遇到\n表示一行读取结束
break;
else {
sb.append((char)ch);
}
}
if(sb.length() > 0) // 字符串缓冲区大小>0,返回字符串
return sb.toString();
return null;
}
}
// MyLineNumberReader.java
// 继承MyBufferedReader类,实现setLineNumber()和getLineNumber()功能
import java.io.IOException;
import java.io.Reader;
public class MyLineNumberReader extends MyBufferedReader{
private MyBufferedReader mbr;
private int lineNumber;
public MyLineNumberReader(Reader r){
super(r);
}
public void setLineNumber(int num){
this.lineNumber = num;
}
public int getLineNumber(){
return this.lineNumber;
}
public String readLine() throws IOException{
this.lineNumber++;
return(super.readLine()); // 调用父类的readLine()功能
}
}
// Test.java
// 测试功能类,main函数
import java.io.FileReader;
import java.io.IOException;
public class Test{
public static void main(String[] args) throws IOException{
MyLineNumberReader mlnr = new MyLineNumberReader(new FileReader("E:\\词频分析\\text.txt"));
String line = mlnr.readLine();
System.out.println(mlnr.getLineNumber() + ": " + line);
}
}
- 登录注册IO版
// User.java
// 用户信息类,包含用户名、密码等信息
public class User {
// 用户名
private String username;
// 密码
private String password;
public User() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
// UserDao.java
// 用户登录功能接口,包括注册和登录
public interface UserDao {
public abstract boolean log(String username, String password);
public abstract void regist(User user);
}
// UserDaoImpl.java
// 用户登录功能实现类
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class UserDaoImpl implements UserDao{
// IO形式
private static File file = new File("user.txt");
static{
try {
file.createNewFile();
} catch (IOException e) {
System.out.println("创建文件失败!");
}
}
@Override
// 登录时需注意可能账号文件不存在,会发生FileNotFoundException
public boolean log(String username, String password) {
boolean flag = false;
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader(file));
String line = null;
while((line = br.readLine()) != null){
String[] string = line.split("=");
if(string[0].equals(username) && string[1].equals(password)){
flag = true;
break;
}
}
}catch(FileNotFoundException e){
System.out.println("找不到信息所在文件!");
}catch(IOException e){
System.out.println("用户登录失败!");
}finally{
if(br != null){
try {
br.close();
} catch (IOException e) {
System.out.println("用户登录释放资源失败!");
}
}
}
return flag;
}
@Override
public void regist(User user) {
BufferedWriter bw = null;
try{
bw = new BufferedWriter(new FileWriter(file));
bw.write(user.getUsername() + "=" + user.getPassword());
}catch(IOException e){
System.out.println("用户注册失败!");
}finally{
if(bw != null){
try {
bw.close();
} catch (IOException e) {
System.out.println("用户注册释放资源失败!");
}
}
}
}
}
欢迎转载,表明出处。