当前位置: 主页 > JAVA语言

java 写入大量文件到磁盘-java int数组写入文件速度

发布时间:2023-03-29 22:06   浏览次数:次   作者:佚名

1 如何获得某一个目录下的文件列表?

file mydir = new file("c:/windows/.");

string[] filenames = mydir.list();

2 如何实现一个打开文件或者是存储文件对话框?

awt: filedialog类 + filenamefilter类

swing: jfilechooser类 + filefilter类

其中,基于swing的解决方案功能更加强大,界面也更加美观。

3 利用filereader/fileoutputstream拷贝中文文件出错?

利用如下代码片断拷贝中文文件不会出错:

int c;

while ((c = myfilereader.read()) != -1)

myfilewriter.write(c);

利用如下代码片断拷贝中文文件会导致文件内容错误:

int c;

while ((c = myfilereader.read()) != -1)

myfileoutputstream.write(c);

造成这个问题的原因是:filereader.read()返回一个int,其取值范围是

0 到65535,通常来说是两个字节的;filewriter.write(int c)向文件写

入一个int,通常来说也是两个字节的,如果某个字符的高位字节为空,那

java int数组写入文件速度_java 写入大量文件到磁盘_向磁盘写入文件失败

么其高位字节将被舍弃;fileoutputstream.write(int b)虽然接受一个

int作为参数,实际上只向文件写入一个字节,如果传递过来的参数是一个

双字节的汉字,其高位字节将被舍弃,造成文件内容错误。

建议:永远只使用inputstream/outputstream进行io操作

利用如下代码片断拷贝中文文件不会出错:

int c;

while ((c = myfileinputstream.read()) != -1)

myfileoutputstream.write(c);

4 如何显示和存储拉丁语言中的特殊字符

使用统一码unicode可以显示和存储拉丁语言中的特殊字符。具体应用范例

如下:

myjtextarea.append("u00e1");

myjtextarea.append("u00e2");

myjtextarea.append("u00e3");

myjtextarea.append("u00e4");

myjtextarea.append("u00e5");

myfileoutputstream.write(myjtextarea.gettext().getbytes("utf-8"));

myfileoutputstream.close();

同样,在读取文件的时候也需要将读到的内容转换成统一码。

java int数组写入文件速度_java 写入大量文件到磁盘_向磁盘写入文件失败

byte[] b = new byte[myfile.length()];

fileinputstream in = new fileinputstream(myfile);

in.read(b);

myjtextarea.append(new string(b, "utf-8"));

5 如何利用文件进行数据存取

对于一般的科学计算应用程序,datainputstream和dataoutputstream类通

常是最好的选择。这两个类提供了存取各种数据的方法。下面的范例演示了

构造datainputstream和dataoutputstream的方法:

mydatainputstream = new datainputstream(

new fileinputstream(myinputfile));

mydataoutputstream = new dataoutputstream(

new fileoutputstream(myoutputfile));

利用objectinputstream和objectoutputstream同样可以进行数据存取,需

要注意的是这样做增加了硬盘的开销,因为进行对象序列化过程添加了一

些额外的信息。在利用objectinputstream和objectoutputstream进行通讯

的时候java 写入大量文件到磁盘,虽然数据发收过程得到了大大简化,但是对带宽的要求也大大的

提高了。

6 文件操作的基本原则是什么?

a. 避免多次访问磁盘,例如一次读出n个字节就比每次读出1个字节的访问

java 写入大量文件到磁盘_向磁盘写入文件失败_java int数组写入文件速度

效率要高很多。

b. 避免多次访问操作系统。

c. 避免多次调用文件存取方法。

d. 避免将字节和字符混淆处理,在java语言中字节与字符的概念是不一样

的,在涉及到双字节字符的问题上更是容易出错。

7 如何获得可用的硬盘空间?

目前尚未发现有任何干净利落的纯java方法能够解决这个问题。通常的解

决方案是直接访问操作系统获得这些信息。有一个被称为jconfig的类库提

供了一些方法可以获得磁盘和文件信息,但是可以肯定这个类库使用了jni

方法。

下载地址:

如果你使用的是晕倒死系列操作系统java 写入大量文件到磁盘,那么下面的方法也许能够获得正确

的结果。我之所以说也许,是因为我在多个晕倒死平台上作过实际测试,

在英文版的晕倒死上基本上都能够得到正确的结果,在中文版的晕倒死上

基本上都不能够获得正确的结果。

string osname = system.getproperty("os.name");

string command = "";

if (osname.indexof("nt") > -1)

command = "c:/winnt/system32/cmd.exe";

java 写入大量文件到磁盘_向磁盘写入文件失败_java int数组写入文件速度

else if (osname.indexof("windows") > -1)

command = "c:/windows/command.com";

process p = runtime.getruntime().exec(

command + " /c dir > c:/dir.txt");

p.waitfor();

然后你需要做的是对得到的dir.txt文件进行分析。

如果你使用的是unix/linux操作系统,你可以使用类似的方法来获得相关

信息。建议使用的命令是df -k > dir.txt。

8 我能够用java来格式化我的硬盘或者是软盘么?

关于这个问题,想来在不久的将来仍然是不会有纯java的解决方案了。如

果你一定要在你的java应用程序里面格式化你的c盘的话,下面的这个方法

也许会有所帮助。当然,在你使用这个方法之前,请仔细备份好女朋友给你

的情书或者是记下和下一个网友约会的日期。

建立一个称为formatdrive.bat的文件,该文件必须放在当前目录或者是系

统路径下,文件的内容如下:

rundll32.exe shell32.dll, shformatdrive

格式化硬盘的方法可以这样写:

public void formatdrive()

{

向磁盘写入文件失败_java 写入大量文件到磁盘_java int数组写入文件速度

try

{

process p = runtime.getruntime().exec("formatdrive.bat");

p.waitfor();

} catch (exception e)

{

system.out.println(e);

}

}

9 怎么知道我究竟有几个可用的存储设备?

在unix/linux下你通常没有必要关心这个问题,只要记住那个斜杠就可以了。

在晕倒死下硬盘可以有多个逻辑分区,可应用下面的方法找出来:

public void listdisks()

{

file[] roots = file.listroots();

for (int i=0; i

{

system.out.println(roots[i]);

}

}