
你写得太麻烦了
来个简单的:
(long)fseek(fp,OL,SEEK_END)
另外,记得写报错~
因权限和安全限制,js是不能获得本地文件大小的,除非安装控件。
jsp获取上传文件大小方法如下:
long size=requestgetContentLength() ;
在文件准备上传之前就可以得到其大小。
当然了,在客户端基本上不大可能获取大文件大小的,必须是文件提交上传开始后,在服务端获取得到的,requestgetContentLength() ; 可以在接受数据流之前就可以获得当前要上传的文件流大小。 这样你可以在服务端控制文件上传之前是否允许继续接受数据流。
// 查看copy例子即可。
import javaawtBorderLayout;
import javaawtCursor;
import javaawtToolkit;
import javaawteventActionEvent;
import javaawteventActionListener;
import javabeansPropertyChangeEvent;
import javabeansPropertyChangeListener;
import javaioFile;
import javaioFileInputStream;
import javaioFileOutputStream;
import javaioInputStream;
import javaioOutputStream;
import javaxswingJButton;
import javaxswingJFrame;
import javaxswingJProgressBar;
import javaxswingSwingWorker;
public class Bar extends JFrame implements PropertyChangeListener
{
private static final long serialVersionUID = 1L;
private static final int MIN = 0;
private static final int MAX = 100;
private JProgressBar progressBar;
private JButton copy;
private Task task;
public Bar(String title)
{
setTitle(title);
setLayout(new BorderLayout());
progressBar = new JProgressBar(MIN, MAX);
progressBarsetValue(MIN);
progressBarsetStringPainted(true);
add(progressBar, BorderLayoutCENTER);
copy = new JButton("拷贝");
copyaddActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
start();
copysetEnabled(false);
}
});
add(copy, BorderLayoutEAST);
}
class Task extends SwingWorker<Void, Void>
{
@Override
public Void doInBackground()
{
setProgress(MIN);
File file = new File("ajpg");
long size = filelength();
byte[] bts = new byte[(int) (size / (Mathrandom() 50 + MAX - 50))];
int length = 0;
long cLength = 0;
try
{
InputStream stream = new FileInputStream(file);
OutputStream os = new FileOutputStream(new File("copy_aajpg"));
while((length = streamread(bts)) > 0)
{
oswrite(bts, 0, length);
cLength += length;
setProgress((int) (cLength MAX / size));
Threadsleep(30);
}
osflush();
osclose();
streamclose();
}
catch(Exception e)
{
eprintStackTrace();
}
return null;
}
@Override
public void done()
{
setTitle("拷贝完毕");
ToolkitgetDefaultToolkit()beep();
copysetEnabled(true);
setCursor(null);
}
}
public void propertyChange(PropertyChangeEvent evt)
{
if("progress" == evtgetPropertyName())
{
int progress = (Integer) evtgetNewValue();
progressBarsetValue(progress);
}
}
private void start()
{
task = new Task();
taskaddPropertyChangeListener(this);
taskexecute();
setTitle("正在拷贝");
setCursor(CursorgetPredefinedCursor(CursorWAIT_CURSOR));
}
private static void createAndShowGUI()
{
Bar frame = new Bar("Bar");
framesetAlwaysOnTop(true);
framesetSize(280, 60);
framesetResizable(false);
framesetLocationRelativeTo(null);
framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
framesetVisible(true);
}
public static void main(String[] args)
{
javaxswingSwingUtilitiesinvokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
据指定文件创建FileInputStream,调用available方法返回文件大小,容量为byte
File file = new File("d:\hellogif");
FileInputStream fis = null;
try{
fis = new FileInputStream(file);
Systemoutprintln("文件size:"+StringvalueOf(fisavailable()/1000)+"k");
}catch(IOException e1){
Systemoutprintln("IO出错!");
}
}catch(FileNotFoundException e2){
Systemoutprintln("找不到指定文件");
}
HSSSFWorkbook 和SXSSFWorkbook在导出excel workbook对象在执行write方法写入数据到ServletOutputStream时 是有点区别的
HSSFWorkbook在write方法执行完的时候并没有关闭流 ,所以我们可以对这个流统计大小来获取导出文件的大小,并且最后需要我们手动关闭
而SXSSFWorkbook的write方法把流关闭了,write方法执行完之后out流就空了拿不到大小了
可以看一下SXSSFWorkbook的write方法的源码
可以看到流在源码里关闭了。
所以针对不同的workbook对象我们可以采取不同的方法来获取导出流的大小从而来确定导出文件的大小
1HSSFWorkbook可以通过拿到流写入到文件里来获取文件的大小来获取导出excel的大小
如下面这个controller例子:
2SXSSFWorkbook需要生成两遍workbook对象一遍写出一遍用来获取大小
如下面的controller导出例子
当然以上两种方法都比较笨 要是有更好的方法 欢迎大家留言指正 共同学习呀~
以上就是关于知道文件流指针,如何求文件的大小全部的内容,包括:知道文件流指针,如何求文件的大小、请问jsp页面如何能获取到上传文件的大小,我想通过获取的大小,判断该文件是否可以被上传,请详细点,谢谢、java读取文件时如何获得已读取的字节大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)