当前位置:首页 » 编程语言 » java读取文件的大小

java读取文件的大小

发布时间: 2024-06-18 20:14:32

㈠ 鐢╦ava濡备綍銮峰彇excel鏂囦欢澶у皬

public static void main(String[] args) {
File file = new File("aaa.xls");
System.out.println("鏂囦欢澶у皬锛"+file.length());
}

㈡ 如何查看java一个类的大小

类的各种信息的实例凯陵化后都是放置在JVM中的,这个可以通过Jconsole或者viualvm进行查看,方法就是先运行你的程序然后 使用如上工具监控你程序所在的线程,然后查看关联对象所占的空间, 不过一般情况下不可能直接看出来的,因为你的了可能引用了string 对象然而string对象可能被很多对象引用,这样这块的空间是不记录在 你的对象中的,一般情况查看对象大小主要是担心 内存溢出,这个一般你看对象在盯局戚空间的占比就是数量,以及对象数是否一直在增加 如果一直在增加说明这个对象有问题可能存在内存溢出的风险,比如你查询一个很大的表放置在list中这种情况就可能存在内存溢出,不妨试一下看看查询腊谈以后 内存是如何变化的。

㈢ java中如何判断文件的大小

InputStream stream = new FileInputStream(dir + "镇蠢\\" + dest
+ "散誉.xls"冲旅段);
long size=stream.available();
这个行不?

㈣ java 读取一个巨大的文本文件,该如何实现 既能保证内存不溢出 又能保证性能

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

public class ReadBig {
public static String fff = "C:\\mq\\read\\from.xml";

public static void main1(String[] args) throws Exception {

final int BUFFER_SIZE = 0x300000;// 缓冲区大小为3M

File f = new File(fff);

/**
*
* map(FileChannel.MapMode mode,long position, long size)
*
* mode - 根据是按只读、读取/写入或专用(写入时拷贝)来映射文件,分别为 FileChannel.MapMode 类中所定义的
* READ_ONLY、READ_WRITE 或 PRIVATE 之一
*
* position - 文件中的位置,映射区域从此位置开始;必须为非负数
*
* size - 要映射的区域大小;必须为非负数且不大于 Integer.MAX_VALUE
*
* 所以若想读取文件后半部分内容,如例子所写;若想读取文本后1/8内容,需要这样写map(FileChannel.MapMode.READ_ONLY,
* f.length()*7/8,f.length()/8)
*
* 想读取文件所有内容,需要这样写map(FileChannel.MapMode.READ_ONLY, 0,f.length())
*
*/

MappedByteBuffer inputBuffer = new RandomAccessFile(f, "r")
.getChannel().map(FileChannel.MapMode.READ_ONLY,
f.length() / 2, f.length() / 2);

byte[] dst = new byte[BUFFER_SIZE];// 每次读出3M的内容

long start = System.currentTimeMillis();

for (int offset = 0; offset < inputBuffer.capacity(); offset += BUFFER_SIZE) {

if (inputBuffer.capacity() - offset >= BUFFER_SIZE) {

for (int i = 0; i < BUFFER_SIZE; i++)

dst[i] = inputBuffer.get(offset + i);

} else {

for (int i = 0; i < inputBuffer.capacity() - offset; i++)

dst[i] = inputBuffer.get(offset + i);

}

int length = (inputBuffer.capacity() % BUFFER_SIZE == 0) ? BUFFER_SIZE
: inputBuffer.capacity() % BUFFER_SIZE;

System.out.println(new String(dst, 0, length));// new
// String(dst,0,length)这样可以取出缓存保存的字符串,可以对其进行操作

}

long end = System.currentTimeMillis();

System.out.println("读取文件文件一半内容花费:" + (end - start) + "毫秒");

}

public static void main2(String[] args) throws Exception {
int bufSize = 1024;
byte[] bs = new byte[bufSize];
ByteBuffer byteBuf = ByteBuffer.allocate(1024);
FileChannel channel = new RandomAccessFile(fff, "r").getChannel();
while (channel.read(byteBuf) != -1) {
int size = byteBuf.position();
byteBuf.rewind();
byteBuf.get(bs); // 把文件当字符串处理,直接打印做为一个例子。
System.out.print(new String(bs, 0, size));
byteBuf.clear();
}

}

public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader(fff));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}

}

㈤ java 如何读取大文件

以下将从常规方法谈起,通过对比来说明应该如何使用java读取大文件。

1、常规:在内存中读取
读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法:
Files.readLines(new File(path), Charsets.UTF_8);
FileUtils.readLines(new File(path));
这种方法带来的问题是文件的所有行都被存放在内存中,当文件足够大时很快就会导致程序抛出OutOfMemoryError 异常。
例如:读取一个大约1G的文件:
@Test
public void givenUsingGuava_whenIteratingAFile_thenWorks() throws IOException {
String path = ...
Files.readLines(new File(path), Charsets.UTF_8);
}
这种方式开始时只占用很少的内存:(大约消耗了0Mb内存)
然而,当文件全部读到内存中后,我们最后可以看到(大约消耗了2GB内存):
这意味这一过程大约耗费了2.1GB的内存——原因很简单:现在文件的所有行都被存储在内存中。
把文件所有的内容都放在内存中很快会耗尽可用内存——不论实际可用内存有多大,这点是显而易见的。
此外,我们通常不需要把文件的所有行一次性地放入内存中——相反,我们只需要遍历文件的每一行,然后做相应的处理,处理完之后把它扔掉。所以,这正是我们将要做的——通过行迭代,而不是把所有行都放在内存中。

2、文件流
FileInputStream inputStream = null;
Scanner sc = null;
try {
inputStream = new FileInputStream(path);
sc = new Scanner(inputStream, "UTF-8");
while (sc.hasNextLine()) {
String line = sc.nextLine();
// System.out.println(line);
}
// note that Scanner suppresses exceptions
if (sc.ioException() != null) {
throw sc.ioException();
}
} finally {
if (inputStream != null) {
inputStream.close();
}
if (sc != null) {
sc.close();
}
}
这种方案将会遍历文件中的所有行——允许对每一行进行处理,而不保持对它的引用。总之没有把它们存放在内存中:(大约消耗了150MB内存)

3、Apache Commons IO流
同样也可以使用Commons IO库实现,利用该库提供的自定义LineIterator:
LineIterator it = FileUtils.lineIterator(theFile, "UTF-8");
try {
while (it.hasNext()) {
String line = it.nextLine();
// do something with line
}
} finally {
LineIterator.closeQuietly(it);
}
由于整个文件不是全部存放在内存中,这也就导致相当保守的内存消耗:(大约消耗了150MB内存)

㈥ java file 获取文件大小 ,是什么单位

1、java file 获取文件大小 ,单位旅核升是kb,File.length()获得文件字节大小/1024 获得 KB数, 由于整数运算省略小数部分,故加1。

2、目前Java获取文件大小的方法有两种:

1)拆老通过file的length()方法获取。

2)通过流式方法获取氏亩。

㈦ java读取文件的文件大小有限制吗

按常理来说是没有限制的,但这个看你的拆兄衫硬件,还尘游有java虚拟机的内存配置,一般旅腔100M朝上就有点困难了。
注:当然了,我的电脑比较次

热点内容
华为手机方舟编译器emui91 发布:2024-11-27 00:10:46 浏览:948
高考时老妈解压 发布:2024-11-27 00:09:34 浏览:358
全振动算法 发布:2024-11-27 00:00:24 浏览:843
编译程序用锐龙好还是酷睿好 发布:2024-11-26 23:47:09 浏览:897
苹果缓存清理后会加速吗 发布:2024-11-26 23:28:11 浏览:139
我的世界服务器修改开放端口 发布:2024-11-26 23:22:51 浏览:52
qt5编译器 发布:2024-11-26 23:22:04 浏览:517
白糖期货存储多长时间 发布:2024-11-26 23:15:53 浏览:806
phpgettext 发布:2024-11-26 23:13:19 浏览:645
安卓微信的卡包在哪里 发布:2024-11-26 23:13:18 浏览:204