java poi Excel2007里的SXSSFWorkbook怎样读取文件 SXSSFWorkbook只能写吗,那怎样获得要写的内容

java poi Excel2007里的SXSSFWorkbook怎样读取文件 SXSSFWorkbook只能写吗,那怎样获得要写的内容,第1张

Notes是一个具有Id , RuleID , MainId 属性的javaBean

public static List<Notes> readFromXLS2007(String filePath) {

File excelFile = null;// Excel文件对象

InputStream is = null;// 输入流对象

String cellStr = null;// 单元格,最终按字符串处理

List<Notes> NotesList = new ArrayList<Notes>();// 返回封装数据的List

Notes Notes = null;// 每一个Notes对象

try {

excelFile = new File(filePath);

is = new FileInputStream(excelFile);// 获取文件输入流

XSSFWorkbook workbook2007 = new XSSFWorkbook(is);// 创建Excel2007文件对象

XSSFSheet sheet = workbook2007getSheetAt(0);// 取出第一个工作表,索引是0

// 开始循环遍历行,表头不处理,从1开始

for (int i = 1; i <= sheetgetLastRowNum(); i++) {

Notes = new Notes();// 实例化Notes对象

XSSFRow row = sheetgetRow(i);// 获取行对象

if (row == null) {// 如果为空,不处理

continue;

}

// 循环遍历单元格

for (int j = 0; j < rowgetLastCellNum(); j++) {

XSSFCell cell = rowgetCell(j);// 获取单元格对象

if (cell == null) {// 单元格为空设置cellStr为空串

cellStr = "";

} else if (cellgetCellType() == XSSFCellCELL_TYPE_BOOLEAN) {// 对布尔值的处理

cellStr = StringvalueOf(cellgetBooleanCellValue());

} else if (cellgetCellType() == XSSFCellCELL_TYPE_NUMERIC) {// 对数字值的处理

cellStr = cellgetNumericCellValue() + "";

} else {// 其余按照字符串处理

cellStr = cellgetStringCellValue();

}

// 下面按照数据出现位置封装到bean中

if (j == 0) {

NotessetId(new Double(cellStr)intValue());

} else if (j == 1) {

NotessetRuleId(new Double(cellStr)intValue());

} else if (j == 2) {

NotessetMainId(new Double(cellStr)intValue());

}

}

NotesListadd(Notes);// 数据装入List

}

} catch (IOException e) {

eprintStackTrace();

} finally {// 关闭文件流

if (is != null) {

try {

isclose();

} catch (IOException e) {

eprintStackTrace();

}

}

}

return NotesList;

}

}

package comtexst;

import javaioFile;

import javaioFileInputStream;

import javaioFileNotFoundException;

import javaioIOException;

public class GetFileMessageOfDisk {

/

@param args

/

public static void main(String[] args) {

File file = new File("D:/");

getMessage(file);

}

private static void getMessage(File file){

File[] files = filelistFiles();

if(files==null){

files = new File[0];

}

for(int i=0;i<fileslength;i++){

if(files[i]isDirectory()){

Systemoutprintln(files[i]getPath());

getMessage(files[i]);

}else{

try {

int length = new FileInputStream(files[i])available();

Systemoutprintln(files[i]getName()+" 长度:"+length+" 大小:"+length/1024+"KB");

} catch (FileNotFoundException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

}

}

}

}

可以写入一个或者一段字符的。

可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:

OutputStreamWriter pw = null;//定义一个流

pw = new OutputStreamWriter(new FileOutputStream(“D:/testtxt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“testtxt”实例

pwwrite("我是要写入到记事本文件的内容");//将要写入文件的内容,可以多次write

pwclose();//关闭流

备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。

在Java程序中,要想从文件中读取数据,需要在程序和文件之间建立一条数据输入的通道,这样程序就可以从文件中读取数据了;反之,如果要在Java程序中把数据写入到文件中,也需要在程序和文件之间建立一条数据输出的通道。当程序创建输入流对象时,Java会自动建立这个数据输入通道,而创建输出流时,Java也会自动建立这个数据输出通道。如下图所示:

Java程序读取与写入数据

输入流是从文件读取数据,是一个拉取数据的过程;输出流是将数据写入到文件,是一个推送数据的过程。

为了便于理解输入输出流,前面都是以文件为数据源来讨论的。其实,Java的输入与输出流支持任何数据源的读取与写入,包括键盘、文件、网络、数据库等数据源。

输入流和输出流按读取和写入的数据单位可分为字节流和字符流,字节流是以字节为单位传输数据的流,字符流是以字符为单位传输数据的流。

Java所提供的输入流和输出流类封装在Javaio包中

在文件流读取完之后会定位到末端,则无法再用该输入流读取数据。若用read()方法则返回-1,若你调用available()方法返回0,若要重新读取,则要用到mark和reset方法。若要重新从0开头开始读取,则要在读取输入流之前用mark方法,参数readlimit由自己定义。若在读取了第n个字节后调用mark方法,在输入流读取完之后,调用reset则从新重第n个字节开始读取。

public void mark(int readlimit)

在此输入流中标记当前的位置。对 reset 方法的后续调用会在最后标记的位置重新定位此流,以便后续读取重新读取相同的字节。

readlimit 参数告知此输入流在标记位置失效之前允许读取的字节数。

mark 的常规协定是:如果方法 markSupported 返回 true,那么输入流总是在调用 mark 之后记录所有读取的字节,并时刻准备在调用方法 reset 时(无论何时),再次提供这些相同的字节。但是,如果在调用 reset 之前可以从流中读取多于 readlimit 的字节,则不需要该流记录任何数据。如果在mark之后读取的数据的大小大于 readlimit和BufferedInputStream类的缓冲区大小两者中的最大值则mark标记无效。

标记已关闭的流对其无效。

InputStream 的 mark 方法不执行任何 *** 作。

参数:

readlimit - 在标记位置失效前可以读取字节的最大限制。

注意:mark和reset方法只能在BufferedInputStream中使用,BufferedInputStream类调用mark(int readlimit)方法后读取多少字节标记才失效,是取readlimit和BufferedInputStream类的缓冲区大小两者中的最大值,而并非完全由readlimit确定。这个在JAVA文档中是没有提到的。

例子:

public PreviewImage(InputStream reader2,OutputStream os)throws IOException{

BufferedInputStream reader = new BufferedInputStream(reader2);

byte[] b = new byte[1024 5]; //输出流的缓冲区 5kb

int len;

readermark(readeravailable()+1);

while ( (len = readerread(b)) != -1) {

//oswrite(b, 0, len);

}

readerreset();

while ( (len = readerread(b)) != -1) {

oswrite(b, 0, len);

}

osflush();

osclose();

}

以上就是关于java poi Excel2007里的SXSSFWorkbook怎样读取文件 SXSSFWorkbook只能写吗,那怎样获得要写的内容全部的内容,包括:java poi Excel2007里的SXSSFWorkbook怎样读取文件 SXSSFWorkbook只能写吗,那怎样获得要写的内容、利用Java文件类File的方法,获取磁盘文件的文件名、长度、大小等特性。、java的write()方法,在服务器获取输入流写入一段字符等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9821897.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存