先向文件中写入5个0xFF,再读取刚写的数据,将读取到的再次写到文件,文件却变成了3个0x3F, 数值变
,接上:个数也减半。请教这是为什么?有个任务就是要不断在文件中将特定字节的0变成0xFF以作为该条记录是删除还是正常的标记。请问该如何解决这个问题?谢谢。packaget...
,接上:个数也减半。请教这是为什么?
有个任务就是要不断在文件中将特定字节的0变成0xFF以作为该条记录是删除还是正常的标记。请问该如何解决这个问题?谢谢。
package testf;
import java.io.*;
public class DataStreamTest {
public static void main(String[] args) {
File file1 = new File("e:/testff.txt");
File file2 = new File("e:/testff.txt");
FileInputStream fis = null;
FileOutputStream fos = null;
DataInputStream dis = null;
DataOutputStream dos = null;
try {
fis = new FileInputStream(file1);
dis = new DataInputStream(fis);
int n = 0;
byte[] buff = new byte[1024];
String data = "";
int i = 0;
while((n=dis.read(buff))!=-1){
data += new String(buff,0,n);
}
fos = new FileOutputStream(file2);
dos = new DataOutputStream(fos);
dos.write(data.getBytes());
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(dis!=null)dis.close();
if(fis!=null)fis.close();
if(dis!=null)dis.close();
if(dos!=null)dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
data += new String(buff,0,n,"US-ASCII");
后来发现,将编码方式改成"US-ASCII",结果是:之前是6个FF的,现在是6个3F。 展开
有个任务就是要不断在文件中将特定字节的0变成0xFF以作为该条记录是删除还是正常的标记。请问该如何解决这个问题?谢谢。
package testf;
import java.io.*;
public class DataStreamTest {
public static void main(String[] args) {
File file1 = new File("e:/testff.txt");
File file2 = new File("e:/testff.txt");
FileInputStream fis = null;
FileOutputStream fos = null;
DataInputStream dis = null;
DataOutputStream dos = null;
try {
fis = new FileInputStream(file1);
dis = new DataInputStream(fis);
int n = 0;
byte[] buff = new byte[1024];
String data = "";
int i = 0;
while((n=dis.read(buff))!=-1){
data += new String(buff,0,n);
}
fos = new FileOutputStream(file2);
dos = new DataOutputStream(fos);
dos.write(data.getBytes());
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(dis!=null)dis.close();
if(fis!=null)fis.close();
if(dis!=null)dis.close();
if(dos!=null)dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
data += new String(buff,0,n,"US-ASCII");
后来发现,将编码方式改成"US-ASCII",结果是:之前是6个FF的,现在是6个3F。 展开
3个回答
展开全部
File file1 = new File("e:/testff.txt");
File file2 = new File("e:/testff.txt");
这里是对同一个文件两个引用打开同时进行读写吗?如果是这样的话,是有问题的
File file2 = new File("e:/testff.txt");
这里是对同一个文件两个引用打开同时进行读写吗?如果是这样的话,是有问题的
更多追问追答
追问
应该不是这个原因,如果file2指向一个新文件“E:/testff1.txt”,把从testff.txt中读到的数据写入新文件时,结果只显示一个3F。
谢谢。
追答
有个任务就是要不断在文件中将特定字节的0变成0xFF以作为该条记录是删除还是正常的标记
你这个应该是用的二进制文件吧,注意区分一下二进制文件和文本文件
如果还是不行,你把你那个生成源数据文件的程序贴出来看看
我看见你写入的时候好像是直接用的write(-1)这里-1不会是一个字节的吧
展开全部
可否给出原 :/testff.txt 的原始数据。
我用 0xFF0xFF0xFF0xFF0xFF 测试
生成的还是 0xFF0xFF0xFF0xFF0xFF
data += new String(buff,0,n,"US-ASCII");
也试过,结果一样的,没出现减半现象。
我用 0xFF0xFF0xFF0xFF0xFF 测试
生成的还是 0xFF0xFF0xFF0xFF0xFF
data += new String(buff,0,n,"US-ASCII");
也试过,结果一样的,没出现减半现象。
更多追问追答
追问
:/testff.txt 就是一个新建的文件,写入5个0xFF.
...
// dos.write(data.getBytes());
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
...
先这样写了六个,文件当中是
再换成这样,
...
dos.write(data.getBytes());
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
// dos.write(-1);
...
追答
你的方法挺怪的。
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
dos.write(-1);
这样做完了以后,
还能保证文件中的内容与原来一样吗?
你用这个方法生成的文件,又 dos.write(data.getBytes());
为什么还希望文件的内容与最初的相同呢?
你的目的是什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
文件的打开方式不应该是文本的,而应该是二进制的。
追问
谢谢。能指明下该用哪个方法吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询