<2>以下介绍一些7.0中比较高级的io流.
5.DirectoryStream根据给定路径列举当前文件
1)Files.newDirectoryStream(path,".*");第2个参数指定搜索的文件格式
/**
* 列举目录/文件
*
* @author Lean @date:2014-9-22
*/
public class DirListing {
public static void main(String[] args) {
listDir("E:\\zftphoneTv");
}
public static void listDir(String fileDir){
Path path=Paths.get(fileDir);
DirectoryStream<Path> dirctoryStream=null;
try {
dirctoryStream=Files.newDirectoryStream(path,".*");
for (Path p : dirctoryStream) {
System.out.println(p.getParent()+"\\"+p.getFileName());
}
} catch (IOException e) {
e.printStackTrace();
}finally{
if (dirctoryStream!=null) {
try {
dirctoryStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
6.合并文件
1)通过BufferedWriter循环写入
/**
* 级联合并文件
*
* @author Lean @date:2014-9-22
*/
public class LeveFileSample {
public static void main(String[] args) {
String infilePath1 = "C:/Users/Administrator/Desktop/aa.txt";
String inFilePath2 = "C:/Users/Administrator/Desktop/bb.txt";
String outFilePath = "C:/Users/Administrator/Desktop/cc.txt";
concenateFile(outFilePath, infilePath1,inFilePath2);
}
public static void concenateFile(String outFilePath,String... filePaths){
BufferedWriter bufferedWriter=null;
try {
bufferedWriter=new BufferedWriter(new FileWriter(new File(outFilePath)));
for (String filePath : filePaths) {
FileReader reader=null;
try {
reader=new FileReader(new File(filePath));
int readNum=0;
char[] buff=new char[128];
while ((readNum=reader.read(buff))!=-1) {
bufferedWriter.write(buff,0,readNum);
}
bufferedWriter.newLine();
buff=new char[128];
} catch (IOException e) {
}finally{
if (reader!=null) {
reader.close();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (bufferedWriter!=null) {
bufferedWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2)SequenceInputStream,通过枚举循环并入流中.如下:将合并的流写入新文件
/**
* 合并流
*
* @author Lean @date:2014-9-23
*/
public class FileMerge {
public Vector<String> fileNames=new Vector<String>();
public Vector<InputStream> fileStreams=new Vector<InputStream>();
public static void main(String[] args) {
FileMerge fileMerge=new FileMerge();
fileMerge.getFileNames();
try {
if (fileMerge.getFileStream()) {
fileMerge.mergeFiles();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
private void mergeFiles() {
String outFilePath="C:/Users/Administrator/Desktop/kk.txt";
OutputStream outputStream=null;
byte[] buff=new byte[512];
int readNum=0;
try {
outputStream=new FileOutputStream(outFilePath);
SequenceInputStream sequenceInputStream=new SequenceInputStream(fileStreams.elements());
while ((readNum=(sequenceInputStream.read(buff)))!=-1) {
outputStream.write(buff,0,readNum);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (outputStream!=null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private boolean getFileStream() throws FileNotFoundException {
if (fileNames.size()<1)
return false;
for (String fileName : fileNames) {
fileStreams.add(new FileInputStream(fileName));
}
return true;
}
public void getFileNames(){
String aFile="C:/Users/Administrator/Desktop/a.txt";
String bFile="C:/Users/Administrator/Desktop/b.txt";
String cFile="C:/Users/Administrator/Desktop/c.txt";
fileNames.add(aFile);
fileNames.add(bFile);
fileNames.add(cFile);
}
}
7.ByteArrayOutputStream/DataOutputStream与ByteArrayInputStream/DataInputStream相互对应,data为byte的装饰器.一般应用在对象转换成字节数组传输的情况下,被传输的对象不需要继承任何接口.
/**
* 字节流/数组 应用
*
* @author Lean @date:2014-9-23
*/
public class LiveData {
private ByteArrayOutputStream outputStream;
public static void main(String[] args) {
LiveData data=new LiveData();
data.createData();
data.readData();
}
public void createData(){
try {
outputStream=new ByteArrayOutputStream();
DataOutputStream dataOutputStream=new DataOutputStream(outputStream);
for (int i = 0; i <20; i++) {
Trade trade=new Trade(i);
dataOutputStream.writeInt(trade.scripCode);
dataOutputStream.write(trade.time);
dataOutputStream.writeDouble(trade.bid);
dataOutputStream.writeDouble(trade.offer);
dataOutputStream.writeDouble(trade.high);
dataOutputStream.writeDouble(trade.low);
dataOutputStream.writeLong(trade.quantity);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void readData(){
byte[] timeBuff=new byte[8];
ByteArrayInputStream inputStream=new ByteArrayInputStream(outputStream.toByteArray());
DataInputStream dataInputStream=new DataInputStream(inputStream);
try {
for (int i = 0; i < 20; i++) {
int scripCode=dataInputStream.readInt();
dataInputStream.read(timeBuff);
String time=new String(timeBuff);
double bid=dataInputStream.readDouble();
double offer=dataInputStream.readDouble();
double high=dataInputStream.readDouble();
double low=dataInputStream.readDouble();
long quantity=dataInputStream.readLong();
System.out.println("scripCode>"+scripCode+" time>"+time+" bid>"+bid+" offer>"+offer+" high>"+high+" low>"+low+" quantity>"+quantity+" ");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
8.有的时候,我们需要计算文档的字数,或对文档的控制转换成对文档内容的控制(控制/查询文字/数字).JAVA为我们提供了StreamTokenizer.该类可以将文件流转换成一个个的指令,相当于指针控制内存.
/**
* 文字/数字 解析
*
* @author Lean @date:2014-9-23
*/
public class WordAndNumberParser {
public static void main(String[] args) {
WordAndNumberParser parser=new WordAndNumberParser();
parser.parseFile("C:/Users/Administrator/Desktop/kk.txt");
}
public void parseFile(String fileName){
int wordCount=0;
int numberCount=0;
try (FileReader reader=new FileReader(fileName);){
StreamTokenizer tokenizer=new StreamTokenizer(reader);
tokenizer.slashSlashComments(true);
tokenizer.slashStarComments(true);
while (tokenizer.nextToken()!=StreamTokenizer.TT_EOF) {
if (tokenizer.ttype==StreamTokenizer.TT_WORD) {
wordCount++;
}else if (tokenizer.ttype==StreamTokenizer.TT_NUMBER) {
numberCount++;
}
if (tokenizer.sval!=null&&tokenizer.sval.equals("a")) {
System.out.println(tokenizer.toString());
}
}
System.out.println("wordCount:"+wordCount +" numberCount:"+numberCount);
} catch (Exception e) {
System.out.println("error parser");
}
}
}
9.RandomAccessFile同样也是对文件的操作,只不过它是对字节的操作.seek()方法跳过非法的内容.其一般应用在多线程下载/断点下载.以下为断点下载的例子:
/**
*
*
* @author Lean @date:2014-9-23
*/
public class RecordFile {
public static int fileLength(String urlPath){
HttpURLConnection connection=null;
int length=0;
try {
URL url=new URL(urlPath);
connection=(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
if (connection.getResponseCode()==200) {
length=connection.getContentLength();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return length;
}
public static long downFileLength(String downPath){
File file=new File(downPath);
return file.length();
}
}
/**
*
*
* @author Lean @date:2014-9-23
*/
public class BreakPointDownLoad extends Thread{
private String downLoadPath;
private String urlPath;
public BreakPointDownLoad(String downLoadPath,String urlPath) {
this.downLoadPath=downLoadPath;
this.urlPath=urlPath;
}
@Override
public void run() {
RandomAccessFile raf=null;
InputStream fis=null;
HttpURLConnection conn=null;
try {
int allFileLength=RecordFile.fileLength(urlPath);
long currDownLength=RecordFile.downFileLength(downLoadPath);
long startIndex=currDownLength!=0?currDownLength+1:currDownLength;
System.out.println(allFileLength+" "+currDownLength);
conn=(HttpURLConnection) new URL(urlPath).openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
//request header note!
conn.setRequestProperty("Range", "bytes="+startIndex+"-"+allFileLength);
if (conn.getResponseCode()==206) {
raf=new RandomAccessFile(downLoadPath,"rwd");
raf.seek(startIndex);
fis=conn.getInputStream();
byte[] buff=new byte[512];
int readNum=0;
while ((readNum=(fis.read(buff)))!=-1) {
raf.write(buff,0,readNum);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if (raf!=null) {
raf.close();
}
if (fis!=null) {
fis.close();
}
conn.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
(高级部分还有如PrintStream,LineNumberInputStream,PushbackInputStream等,只不过比较少用)
分享到:
相关推荐
1.创建文件,文件位置为相较于当前工程的位置,不然会报FileNotFoundException 2.新建流:FileReader reader = new F
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
Java进阶IO流讲义大全.docx
Java进阶13天资料 day01-复习回顾、静态、继承、引用类型使用 day02-抽象类、接口、代码块,final、单例、枚举 day03-多态、包、权限修饰符、内部类,Object类,Date类 day04-常用API、正则表达式,泛型、Collection...
主要介绍了Java进阶教程之IO基础,这里只是对Java IO的基本介绍,包含读取和写入等操作,需要的朋友可以参考下
Java基础和Java进阶: 1、Junit使用流程 2、集合进阶(一) 3、集合框架(二) 4、Stream流 5、进阶测试 6、IO流 7、算法(部分) 8、多线程 9、网络编程 10、Java高级
├─1.06 Nginx进阶基础-IO多路复用及内部技术架构.mp4 ├─1.07 Nginx进阶基础-虚拟主机.mp4 ├─1.08 Nginx进阶基础-虚拟主机.mp4 ├─2.01 Nginx进阶常见配置-虚拟主机+PHP-FPM.mp4 ├─2.02 Nginx进阶-常见配置-...
本教程适合有一定编程语言基础的学员观看,主要讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师语言表达流利,思路清晰。...
27天实现java从入门到进阶 第一天:语言环境 第二天:常量变量 第三天:流程控制 第四、五天:方法与数组 第六天:类 第七天:对象的出生 第八天:类与类继承 第九天:具体到抽象的升华 第10天:权限内部类包 第11天...
该代码源码资源是一个用于讲解Java IO流的示例代码库。它包含了常见的IO类和方法的使用示例,旨在帮助理解和掌握Java中的输入输出操作。 包含: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、...
Java进阶课程代码包含文件读写IO流,递归算法思想,数组排序、生产模式(单体、工厂)
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
《O’reilly-Java IO》- 推荐* (包含Java IO编程的各个方面) 《O’reilly-Database Programming with JDBC》- 推荐* (JDBC编程) 《O’reilly-Java Programming with Oracle JDBC》- 参考* 三、Java Web编程 ...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太...