----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
XML封装
java获取非常麻烦 用很多方法
所以有牛人写了
dom4j (dom for java)
PrintWriter
IO包中的其他类
打印流:
PrintWriter和PrintStream
可以直接操作输入流和文件
序列流:
SequenceInputStream
对多个流进行合并
操作对象:
ObjectInputStream与ObjectOutputStream
被操作的对象需要实现Serializeble(标记接口)
练习:文件分割程序
打印流:
可以将各种数据类型的数据都原样打印
int只输出最低8位
PrintStream(字节打印流)
构造时能直接操作文件
构造函数可以接收的参数类型:
1、file对象
2、字符串路径
3、字节输出流
PrintWriter(字符打印流)
1、file对象
2、字符串路径
3、字节输出流
4、字符输出流
main
{
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//读取键盘输入的字符流,背也要背下来
PrintWriter out = new PrintWriter(System.out,true);
//输出换行就刷新
/*写入文件中 “a.txt”,无法刷新,要文件也刷新? 将文件封装成流就可以了 :(new FileWriter("a,txt"),true); 提高效率? 再加一个new BufferedWriter(...) */
String line = null;
while((line = bufr.readLine())!=null)
{
if("over".equals(line))
break;
out.println(line.toUpperCase());
//out.flush();
}
out.close();
bufr.close();
}
合并流
SequnceInputStream
没有对应的OutputStream
表示其他输入流的逻辑串联,从输入流的有序集合开始,从第一个输入流开始读取,直到文件末尾,接着从第二个输入流读取,依此类推,指导包含的最后一个输入流的文件末尾为止。
SequenceInputStream(InputStream s1,InputStream s2);
SequenceInputStream(Enumeration extends InputStream>);
通过记住参数来初始化新创建的SequenceInputStream
public static void main(String[] args)
{
Vector
v.add(new FileInputStream("c:\\1.txt"));
v.add.........
v.add.........
Enumetation
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream("c:\\4.txt");
byte[] buf = new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
多个读取流合并成一个读取流
切割文件
public static void splitFile()throws IOException
{
FileInputStream fis = new FileInputStream("c:\\1.bmp");
FileOutputStream fos = null;
byte[] buf = new byte[1024*1024];
int len = 0;
int count = 1;
while((len=fis.read(buf))!=-1)
{
fos = new FileOutputStream("c:\\splitfiles\\"+(count++)+".part");
fos.write(buf,0,len);
fos.close();
}
fis.close();
}
合并碎片文件:
public static void merge()
{
ArrayList
for(int x=1;x<=3;x++)
{
al.add(new FileInputStream("c:\\aplitfiles\\"+x+".part"));
}
final Iterator
Enumeration
{
public boolean hasMoreElements()
{
return it.hasNext();
}
public FileInputStream nextElement()
{
return it.next();
}
};
SequenceInputStream sis = new SequenceInputStream(en);
//偷懒就不加缓冲区了
FileOutputStream fos = new FileOutputStream("c:\\splitfiles\\0.bmp");
byte[] buf = new byte[1024];
int len=0;
while((len=sis.read(buf))!=-1)
{
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
若想分割成100M一个的碎片
计数器,100次之后重新创建一个输出流对象
不要直接定义100M的数组,内存会挂掉的 - -
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------