java IO文件操作入门经典例子-学会这些例子,你会发现IO是如此简单

时间:2021-10-31 13:16:04
IO是JAVASE中非常重要的一块,是面向对象的完美体现,深入学习IO,你将可以领略到很多面向对象的思想。
在公司没活干,复习了一下IO,发现很多都忘记了,所以写的不好,只够初学用。我把我复习过程中写的代码贴出来,大家共同学习,并请多指教指教哈。顺便一起讨论IO
1、文件拷贝

try {
File inputFile = new File(args[0]);
if (!inputFile.exists()) {
System.out.println("源文件不存在,程序终止");
System.exit(1);
}
File outputFile = new File(args[1]);
InputStream in = new FileInputStream(inputFile);
OutputStream out = new FileOutputStream(outputFile);

byte date[] = new byte[1024];
int temp = 0;
while ((temp = in.read(date)) != -1) {
out.write(date);
}

in.close();
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


2、java读文件:实现统计某一目录下每个文件中出现的字母个数、数字个数、空格个数及行数,除此之外没有其他字符

 String fileName = "D:/date.java.bak";
// String fileName = "D:/test.qqq";
String line;
int i = 0, j = 0, f = 0, k = 0;
try {
BufferedReader in = new BufferedReader(new FileReader(fileName));
line = in.readLine();
while (line != null) {
// System.out.println(line);
char c[] = line.toCharArray();
for (int i1 = 0; i1 < c.length; i1++) {
// 如果是字母
if (Character.isLetter(c[i1]))
i++;
// 如果是数字
else if (Character.isDigit(c[i1]))
j++;
// 是空格
else if (Character.isWhitespace(c[i1]))
f++;
}
line = in.readLine();
k++;
}
in.close();
System.out
.println("字母:" + i + ",数字:" + j + ",空格:" + f + ",行数:" + k);
} catch (IOException e) {
e.printStackTrace();
}

3、 从文件(d:\test.txt)中查出字符串”aa”出现的次数

try {
BufferedReader br = new BufferedReader(new FileReader(
"D:\\test.txt"));
StringBuilder sb = new StringBuilder();
while (true) {
String str = br.readLine();
if (str == null)
break;
sb.append(str);
}
Pattern p = Pattern.compile("aa");
Matcher m = p.matcher(sb);
int count = 0;
while (m.find()) {
count++;
}
System.out.println("\"aa\"一共出现了" + count + "次");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

4、 三种方法读取文件

 try {
// 方法一
BufferedReader br = new BufferedReader(new FileReader(new File(
"D:\\1.xls")));
// StringBuilder bd = new StringBuilder();
StringBuffer bd = new StringBuffer();
while (true) {
String str = br.readLine();
if (str == null) {
break;
}
System.out.println(str);
bd.append(str);
}

br.close();
// System.out.println(bd.toString());

// 方法二
InputStream is = new FileInputStream(new File("d:\\1.xls"));
byte b[] = new byte[Integer.parseInt(new File("d:\\1.xls").length()
+ "")];
is.read(b);
System.out.write(b);
System.out.println();
is.close();

// 方法三
Reader r = new FileReader(new File("d:\\1.xls"));
char c[] = new char[(int) new File("d:\\1.xls").length()];
r.read(c);
String str = new String(c);
System.out.print(str);
r.close();

} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

5、三种方法写文件

 try {
PrintWriter pw = new PrintWriter(new FileWriter("d:\\1.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(
"d:\\1.txt")));
OutputStream os = new FileOutputStream(new File("d:\\1.txt"));
// 1
os.write("ffff".getBytes());
// 2
// bw.write("ddddddddddddddddddddddddd");
// 3
// pw.print("你好sssssssssssss");

bw.close();
pw.close();
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

6、读取文件,并把读取的每一行存入double型数组中

try {
BufferedReader br = new BufferedReader(new FileReader(new File(
"d:\\2.txt")));
StringBuffer sb = new StringBuffer();
while (true) {
String str = br.readLine();
if (str == null) {
break;
}
sb.append(str + "、");
}

String str = sb.toString();
String s[] = str.split("、");
double d[] = new double[s.length];
for (int i = 0; i < s.length; i++) {
d[i] = Double.parseDouble(s[i]);
}
for (int i = 0; i < d.length; i++) {
System.out.println(d[i]);
}
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

226 个解决方案

#1


还有很多比较初级的比如说文件创建删除这些,我就不贴出来了,相信这些大家都没什么问题。我贴的主要是对文件的读写操作

#2


我是初学者,觉得挺适合我的。
LZ,xiexie.....

#3


该回复于2011-05-11 18:00:23被版主删除

#4


给点小意见,其实IO流还是很简单的,只要我们将流和目标文件想象成管道和水桶就很容易理解和编程了!
不知道你是否看过那些*大师讲IO这章的视频,给人映像很深刻!

#5


我也是新来的啊  谢谢啊

#6


看了半天,我也没有看懂

#7


会了!

#8


楼主,最近我正在迷糊于此。。。不得不说。。。你来的真是时候

顶顶顶

#9


"面向对象的完美体现" 

#10


该回复于2011-05-12 09:25:13被版主删除

#11


我是初学者,觉得挺适合我的。
LZ,xiexie.....

#12


该回复于2011-05-12 08:36:46被版主删除

#13


不复习一下还真忘记了!

#14


引用 4 楼 tianyu945473925 的回复:
给点小意见,其实IO流还是很简单的,只要我们将流和目标文件想象成管道和水桶就很容易理解和编程了!
不知道你是否看过那些*大师讲IO这章的视频,给人映像很深刻!


确实是这样的。重要的是编程思想,我发现IO这一块真的是面向对象的完美体现,抽象类和接口、多态性,各种设计模式在里面体现的淋漓尽致。仔细研究研究还是不错的。

#15


我列的不全,很多东西我就不贴上来了。比如说写文件,还有好几种方式。
今天只是实现了读写的功能,具体各种的区别及用场,各位慢慢搞吧。有的东西只能意会呀,--

#16


哦  编程很牛

#17


该回复于2011-05-12 08:36:46被版主删除

#18


尽整些 没用的

IO流搞清楚两类,字节流和字符流

然后理解装饰模式 就完了。。。

#19


谢谢分享

#20


很有用的总结,获益匪浅,谢了大虾。

#21


还可以

#22


谢谢分享

#23


该回复于2011-05-12 09:28:02被版主删除

#24


该回复于2011-05-12 09:28:01被版主删除

#25


楼主没有讲清楚,只是列了程序。。。。

#26


该回复于2011-05-12 09:41:01被版主删除

#27


谢谢楼主。

#28


该回复于2011-05-12 09:42:22被版主删除

#29


LZ 能写下 读取大文件的吗 比如 60M 的TXT文件 解析上面的。  看下楼主用的方法?

#30


谢谢分享,多看看没错的!

#31


我是初学者,觉得挺适合我的。
LZ,xiexie.....

#32


引用 18 楼 magicluo 的回复:
尽整些 没用的

IO流搞清楚两类,字节流和字符流

然后理解装饰模式 就完了。。。

我整 的都是初级用的。只是看看API随便写了点东西,所以肯定 不具体。要不您整理整理,让我大家学习学习

#33


有用啊,谢谢

#34


该回复于2011-05-12 09:38:21被版主删除

#35


该回复于2011-05-12 09:43:06被版主删除

#36


该回复于2011-05-12 09:43:06被版主删除

#37


该回复于2011-05-12 09:43:05被版主删除

#38


该回复于2011-05-12 09:43:35被版主删除

#39


该回复于2011-05-12 09:43:34被版主删除

#40


推荐楼主的精神!

#41


新人,感谢楼主推荐!

#42


這個帖子必須要收藏的

#43


很好呀!谢谢!

#44


每 天回 帖即 可 获得 1 0 分 可用 分! 耶

#45


觉得挺适合我的。

#46


该回复于2011-05-12 10:40:34被版主删除

#47


先回复再看看

#48


该回复于2011-05-12 10:41:02被版主删除

#49


该回复于2011-05-12 10:41:27被版主删除

#50


import java.io.*;

public class CopyBytes{
    public static void main(String[]args)throw IOException{
        File inputFile=new File("farrago.txt");
        File outputFile=new File("outagainb.txt");
        

        FileInputStream in=new FileInputStream(inutFile)
        FileOututStream out=new FileOutputStream(outputFile);

        int c;
        while((c=in.read())!=-1)
            out.write(c);
        in.close();
        out.close();
    }
}
这是我在书上抄的文件复制的代码  楼主解释下 建立 byte date[]=new byte[1024]
和 date做 in.read()的参数吗

#1


还有很多比较初级的比如说文件创建删除这些,我就不贴出来了,相信这些大家都没什么问题。我贴的主要是对文件的读写操作

#2


我是初学者,觉得挺适合我的。
LZ,xiexie.....

#3


该回复于2011-05-11 18:00:23被版主删除

#4


给点小意见,其实IO流还是很简单的,只要我们将流和目标文件想象成管道和水桶就很容易理解和编程了!
不知道你是否看过那些*大师讲IO这章的视频,给人映像很深刻!

#5


我也是新来的啊  谢谢啊

#6


看了半天,我也没有看懂

#7


会了!

#8


楼主,最近我正在迷糊于此。。。不得不说。。。你来的真是时候

顶顶顶

#9


"面向对象的完美体现" 

#10


该回复于2011-05-12 09:25:13被版主删除

#11


我是初学者,觉得挺适合我的。
LZ,xiexie.....

#12


该回复于2011-05-12 08:36:46被版主删除

#13


不复习一下还真忘记了!

#14


引用 4 楼 tianyu945473925 的回复:
给点小意见,其实IO流还是很简单的,只要我们将流和目标文件想象成管道和水桶就很容易理解和编程了!
不知道你是否看过那些*大师讲IO这章的视频,给人映像很深刻!


确实是这样的。重要的是编程思想,我发现IO这一块真的是面向对象的完美体现,抽象类和接口、多态性,各种设计模式在里面体现的淋漓尽致。仔细研究研究还是不错的。

#15


我列的不全,很多东西我就不贴上来了。比如说写文件,还有好几种方式。
今天只是实现了读写的功能,具体各种的区别及用场,各位慢慢搞吧。有的东西只能意会呀,--

#16


哦  编程很牛

#17


该回复于2011-05-12 08:36:46被版主删除

#18


尽整些 没用的

IO流搞清楚两类,字节流和字符流

然后理解装饰模式 就完了。。。

#19


谢谢分享

#20


很有用的总结,获益匪浅,谢了大虾。

#21


还可以

#22


谢谢分享

#23


该回复于2011-05-12 09:28:02被版主删除

#24


该回复于2011-05-12 09:28:01被版主删除

#25


楼主没有讲清楚,只是列了程序。。。。

#26


该回复于2011-05-12 09:41:01被版主删除

#27


谢谢楼主。

#28


该回复于2011-05-12 09:42:22被版主删除

#29


LZ 能写下 读取大文件的吗 比如 60M 的TXT文件 解析上面的。  看下楼主用的方法?

#30


谢谢分享,多看看没错的!

#31


我是初学者,觉得挺适合我的。
LZ,xiexie.....

#32


引用 18 楼 magicluo 的回复:
尽整些 没用的

IO流搞清楚两类,字节流和字符流

然后理解装饰模式 就完了。。。

我整 的都是初级用的。只是看看API随便写了点东西,所以肯定 不具体。要不您整理整理,让我大家学习学习

#33


有用啊,谢谢

#34


该回复于2011-05-12 09:38:21被版主删除

#35


该回复于2011-05-12 09:43:06被版主删除

#36


该回复于2011-05-12 09:43:06被版主删除

#37


该回复于2011-05-12 09:43:05被版主删除

#38


该回复于2011-05-12 09:43:35被版主删除

#39


该回复于2011-05-12 09:43:34被版主删除

#40


推荐楼主的精神!

#41


新人,感谢楼主推荐!

#42


這個帖子必須要收藏的

#43


很好呀!谢谢!

#44


每 天回 帖即 可 获得 1 0 分 可用 分! 耶

#45


觉得挺适合我的。

#46


该回复于2011-05-12 10:40:34被版主删除

#47


先回复再看看

#48


该回复于2011-05-12 10:41:02被版主删除

#49


该回复于2011-05-12 10:41:27被版主删除

#50


import java.io.*;

public class CopyBytes{
    public static void main(String[]args)throw IOException{
        File inputFile=new File("farrago.txt");
        File outputFile=new File("outagainb.txt");
        

        FileInputStream in=new FileInputStream(inutFile)
        FileOututStream out=new FileOutputStream(outputFile);

        int c;
        while((c=in.read())!=-1)
            out.write(c);
        in.close();
        out.close();
    }
}
这是我在书上抄的文件复制的代码  楼主解释下 建立 byte date[]=new byte[1024]
和 date做 in.read()的参数吗