黑马程序员技术交流社区
标题: java基础--IO练习3 [打印本页]
作者: 周发建 时间: 2016-3-28 09:45
标题: java基础--IO练习3
[size=16.0000pt](一)练习:深度遍历文件写入到指定文件中练习2:将指定路径下的文件深度遍历记录到文件中
/**练习2:将指定路径下的文件深度遍历记录到文件中
* 1. 深度遍历
* 2. 过滤器,将符合条件的存储到容器中
* 3. 对容器中的内容进行遍历并将绝对路径写入文件中
* 3. 存储到集合中[内存]
* 4. 持久化到文件
*/
public static void writeByFile(List<File> list,File dest){
BufferedWriter bufw = null;
try {
bufw = new BufferedWriter(new FileWriter(dest));
if(list != null)
for(File file: list){
bufw.write(file.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
bufw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void lookFileAllByFile(File dir,List<File> list){
File[] files = dir.listFiles(new Filter());
if(files!=null)
for(File file: files){
//目录
if(file.isDirectory()){
lookFileAllByFile(file,list);
}
//文件
else{
list.add(file);
}
}
}
[size=16.0000pt](二)其他流对象 PrintWriter/PrintStream //打印流,可以直接操作文件和流
SequenceInputStream //序列流,对多个流进行合并
SequenceInputStream(Enumeration<? extends InputStream> e)
SequenceInputStream(InputStream s1, InputStream s2)
ObjectInputStream/ObjectOutputStream
操作对象的流,被操作的对象需要实现Serializable接口
将对象写入磁盘,只能将非静态和非瞬态。
transient 瞬态 //private transient String name;
static 静态 //private static String name;
RandomAccessFile 随机访问文件,自身具备读写方法
管道流,输入输出可以直接连接、结合线程使用
PipedInputStream/PipedOutputStream
内存中的流
DataInputStream/DataOutputStream 操作基本数据类型
ByteArrayInputStream/ByteOutputStream 操作字节数组
CharArrayReader/CharArrayWriter 操作字符数组
StringReader/StringWriter 操作字符串
[size=16.0000pt](三)练习:分割、合并、配置文件 /**
* 练习:文件切割、合并、配置文件
* 1. 切割
* 2. 配置文件记录切割文件的名称和切割次数
* 3. 读取配置文件并合并
*/
//分割
public static void partition(File file,Properties pro) throws IOException{
if(file!=null){
pro.setProperty("fileName", file.getName());
InputStream in = new FileInputStream(file);
String dir = "d:/zhoujian/io";
pro.setProperty("path", dir);
File path = new File(dir);
if(!path.exists()){
path.mkdirs();
}
OutputStream out = null;
byte[] buf = new byte[1024*1024];
int len = 0;
int i = 1;
while((len = in.read(buf))!=-1){
File temp = new File(dir,i++ + ".part");
if(!temp.exists()){
temp.createNewFile();
}
out = new FileOutputStream(temp);
out.write(buf, 0, len);
out.flush();
out.close();
}
pro.setProperty("num", i+"");
in.close();
}
}
//合并
public static void merge(File dir,Properties pro) throws IOException{
if(!dir.exists()){
dir.mkdirs();
}
String fileName = pro.getProperty("fileName");
File file = new File(dir, fileName);
if(!file.exists()){
file.createNewFile();
}
String path = pro.getProperty("path");
int num = Integer.parseInt(pro.getProperty("num"));
List<InputStream> list = new ArrayList<InputStream>();
for(int i=1;i<num;i++){
File temp = new File(path,i+".part");
list.add(new FileInputStream(temp));
}
Enumeration<InputStream> es = Collections.enumeration(list);
SequenceInputStream sin = new SequenceInputStream(es);
OutputStream out = new FileOutputStream(file);
byte[] buf = new byte[1024*1024];
int len = 0;
while((len = sin.read(buf))!=-1){
out.write(buf, 0, len);
out.flush();
}
out.close();
sin.close();
}
[size=16.0000pt](四)按字节截取字符串file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wpsE064.tmp.jpg
/**
* 练习:按字节截取字符串
* 字符串,汉字的都是负数
* 1. 判断负数出现的次数,偶数个不舍,奇数个舍弃
* 2. 例如: ab你
* a 97
* ab 97 98
* ab 97 98
* ab你 97 98 -69 -20
*/
public static String getStrNumByByte(String str,int len) throws IOException{
byte[] buf = str.getBytes("gbk");
if(len> buf.length){
len = buf.length;
}
int count = 0;
for(int i=len-1;i>=0;i--){
if(buf<0){
count ++;
}
else{
break;
}
}
if(count %2 ==0){
return new String(buf,0,len,"gbk");
}else{
return new String(buf,0,len-1,"gbk");
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |