import java.io.*;
public class Test {
public static void main(String args[]){
try {
FileReader f=new FileReader( "E:\test.txt ");
BufferedReader in=new BufferedReader(f);
String s=null;
int i=0;
while ((s=in.readLine())!=null){
FileOutputStream out1 = new FileOutputStream( "E:\copytest.txt ");
BufferedOutputStream out2 = new BufferedOutputStream(out1,1);
DataOutputStream out = new DataOutputStream(out2);
out.writeUTF(s);
System.out.print(i+1+ " ");
System.out.println(s);
i++;
}
}catch(Exception e){
e.printStackTrace();
}
}
}
E:\copytest.txt 写入到这里的字符串是乱码?
另外要关那个流?
1、兄弟,你这样写是不对的
[code="java"]
while ((s=in.readLine())!=null){
FileOutputStream out1 = new FileOutputStream("E:\copytest.txt");
BufferedOutputStream out2 = new BufferedOutputStream(out1,1);
DataOutputStream out = new DataOutputStream(out2);
...
}
[/code]
每次进循环都将copytest.txt文件清空了new FileOutputStream("E:\copytest.txt");
应该把while里面前三行放在循环外面
2、关闭流一般是从后往前关, 可以关的都关了最好, 顺序如out>out2>out1
3、一般DataOutputStream是用于读取DataInputStream写进的文件
4、另外,我用你的程序倒不会出现乱码
5、一般的用法是,效率高,不会有乱码
[code="java"]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class TestCopyFile {
/**
* @param args
*/
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
BufferedReader br = null;
BufferedWriter bw = null;
try {
fis = new FileInputStream("E:/test.txt");
fos = new FileOutputStream("E:/copytest.txt");
br = new BufferedReader(new InputStreamReader(fis));
bw = new BufferedWriter(new OutputStreamWriter(fos));
String str;
while ((str = br.readLine()) != null) {
bw.write(str);
bw.newLine();
}
} catch (Exception e) {
System.out.println(e);
} finally { // 从最后使用的关闭到最先使用的
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
bw = null;
}
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
br = null;
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
fos = null;
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
fis = null;
}
}
}
}
}
[/code]
[code="java"]import java.io.*;
public class Test {
public static void main(String args[]){
try {
BufferedReader br = new BufferedReader(new FileReader("E:\\test.txt"));
String s = null;
PrintWriter pw = new PrintWriter(new FileOutputStream("E:\\copytest.txt"));
int i = 0;
while ((s=br.readLine())!=null){
pw.println(s);
System.out.print(i+1+ " ");
System.out.println(s);
i++;
}
pw.close();
br.close();
}catch(Exception e){
e.printStackTrace();
}
}
}[/code]
这样试一下,关流的话关最外层就可以了
1、Java语言中按照基本数据类型进行读/写的是: DataInputStream和DataOutputStream类,这两个类的对象是过滤流。将基本字节输入/输出流,自动转成基本数据类型进行读/写的过滤流。
2、给个例子
[code="java"]
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
@author zhanjia
*
*/
public class DataInputStreamTest1 {
public static void main(String[] args) {
DataInputStream dis = null;
DataOutputStream dos = null;
int v = 0;
float f = 0;
try {
// 写入数据
dos = new DataOutputStream(new FileOutputStream("E:/test.txt"));
for (int k = 1; k <=5; k++) {
dos.writeInt(k);
}
dos.writeFloat(1);
dos.close();
// 读出数据
dis = new DataInputStream(new FileInputStream("E:/test.txt"));
for (int k = 1; k <=5; k++) {
v = dis.readInt();
System.out.println(v + " ");
}
try {
while (true) {
f = dis.readFloat();
System.out.println(f + " ");
}
} catch (EOFException e) {
}
dis.close();
} catch (Exception e) {
} finally {
try {
dos.close();
} catch (IOException e) {
dos = null;
}
try {
dis.close();
} catch (IOException e) {
dis = null;
}
}
}
}
[/code]
3、由于是按基本类型进行读写,所以如上面例子,int占4个字节,因而写到文件里面自然为乱码。所以它的读取是有规定的,怎样写就要怎样写,否则会出乱子。
读取内容没问题,查看文件有乱码是正常的