请教关于在文件存取的问题

myelan 2002-09-29 05:28:18
我想程序生成一个数据文件
大概格式如下:
1 123 23
2 121 122
3 45 345
4 34 32
……
就是把一个二维数组导入文件

然后,我又怎么
把它读取出来还原到数组


因为没有好书,看了一下,还是云里雾里的
希望高手指点一下

如果有类似的smaple code,那就多谢了。
...全文
8 点赞 收藏 10
写回复
10 条回复
bigbearcn 2002年10月01日
package filesystembinder;


import java.io.*;
import java.util.StringTokenizer;

public class Untitled1
{

public Untitled1()
{
String[] dest = new String[100];
try{
String fileContent = ReadFile("d:\\a.txt");
TakeToArrary(fileContent,dest);
ShowArrayInfo(dest);
} catch(Exception e) {
}
}


public static void main(String[] args)
{
Untitled1 untitled11 = new Untitled1();
}

private String ReadFile(String fileName) throws IOException {
File file = new File(fileName) ;
int fileLength = (int) file.length() ;
int charRead = 0 ;
char[] content = new char[fileLength] ;
FileReader reader = new FileReader(file) ;

while(reader.ready()) {
charRead = reader.read(content,charRead,fileLength - charRead);
}

return new String(content,0,fileLength - 1);
}

private void TakeToArrary(String content, String[] destArr) {
int i = 0 ;
StringTokenizer st = new StringTokenizer(content);
while (st.hasMoreTokens()) {
destArr[i++] = st.nextToken() ;
}
}

private void ShowArrayInfo(String[] Arr) {
for(int i=0 ; i< Arr.length ; i ++)
if(Arr[i].length() != 0) System.out.print(" " + Arr[i]) ;
}
}
回复 点赞
DanielYWoo 2002年10月01日
>我就是因为用什么记事本打不开,以为有问题,所以才问的。
>那要怎么样才能保证记事本也可以打开呢。
>还有个问题在写文件的时候,怎么才能够换行呢?

你是不是想存成文本文件,有格式,可以在记事本里编辑?
那就用字符流,你得把int i =345 转换为 String i = "345"
存到文件里,你可以以white space为分割,也就是说
空格 tab 回车 都被视作分割符
如果文件很小,可以一次全读出来,再用StringTokenizer挑出来
回复 点赞
killjoy 2002年10月01日
换行的时候打入一个println就可以了。
回复 点赞
myelan 2002年09月29日
DanielYWoo(绿色毒汁) 谢谢你,
刚才我也把这个程序写出来了

import java.util.*;
import java.io.*;

public class Create extends Random
{

public static final int LINE=10;
public static void main(String[] args)
{
Create ni=new Create();
int[][] p=new int[3][LINE];
for (int i=0;i<3;++i)
for (int j=0;j<LINE;++j)
p[i][j]=ni.next(8);
try
{
FileOutputStream fo=new FileOutputStream("unsort");
DataOutputStream dout=new DataOutputStream(fo);
for (int i=0;i<3;++i)
for (int j=0;j<LINE;++j)
dout.writeInt(p[i][j]);
dout.flush();
dout.close();
}
catch(IOException e)
{
System.out.println("IO ERROR");
}
}
}


我就是因为用什么记事本打不开,以为有问题,所以才问的。
那要怎么样才能保证记事本也可以打开呢。

还有个问题在写文件的时候,怎么才能够换行呢?

还要等一下结账哦,对不住
回复 点赞
DanielYWoo 2002年09月29日
这种方法,以二进制存储,最省地方,最快,
但是用记事本打开,看不出来,必须用16进制编辑器打开才能看,
不过用程序读出来很容易

下例:write往文件写,read从文件读


import java.io.*;
import java.util.Random;

public class XXX
{

public static void main(String args[])
{
write();
read();

}

public static void write()
{
System.out.println("Write");
try{
int x = 5;
int y = 6;
BufferedOutputStream fout = new BufferedOutputStream(
new FileOutputStream("d:\\index.txt"));
fout.write(x);
fout.write(y);

Random rand = new Random();
int array[][] = new int[x][y];

for(int i=0; i<x; i++){
System.out.println();

for(int j=0; j<y; j++){
int temp = rand.nextInt(100);
System.out.println(temp);
fout.write(temp);
}
}
fout.close();
}catch(Exception e)
{ System.out.println(e);}

}
public static void read()
{
System.out.println("Read");
try{
BufferedInputStream fin = new BufferedInputStream(
new FileInputStream("d:\\index.txt"));
int x, y;
x = fin.read();
y = fin.read();
int array[][] = new int[x][y];

for(int i=0; i<x; i++){
System.out.println();
for(int j=0; j<y; j++){
int temp = fin.read();
System.out.println(temp);
}
}
fin.close();
}catch(Exception e)
{ System.out.println(e);}
}
}

回复 点赞
myelan 2002年09月29日
要个例程呀
回复 点赞
oldfisher 2002年09月29日
一个二维数组导入文件 从文件里读数据到数组中
较好的方法是在向文件写数组数据前
先把数组的维数 长度值写进去
在从文件读出数据前先把这些数据读出来就好构造数组了
最好的方法是序列化了 呵呵
回复 点赞
chl 2002年09月29日
不止有没有更好的方法,但我这个时必定可行的方法,就是把你这个二维数组的内容按照你所列的格式那样放到一个String里面然后写出文件。然后度的时候也都城String对象,然后用java.util.StringTokenizer一个一个提取出来,放到二维数组里面。
回复 点赞
myelan 2002年09月29日
老大们
帮帮我
回复 点赞
myelan 2002年09月29日
在线等待,解决给分
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告