首页 > 编程语言 >java 读取各种类型的文件 (三)

java 读取各种类型的文件 (三)

时间:2023-08-23 16:13:23浏览次数:47  
标签:java 读取 各种类型 buffer try reader catch new null

后端java,springboot 、前端vue: 对 txt文件的读写,以及前端预览

一、后端读

  public void readTxt() {

                InputStreamReader input = null;
BufferedReader buffer_reader = null;
          ArrayBlockingQueue<String[]> fileData = new
ArrayBlockingQueue<String[]>(50000);
                try {
input = new InputStreamReader(new FileInputStream(new File(xxx)), Charset.forName("UTF-8"));
buffer_reader = new BufferedReader(input, 2048); // 2MB 缓存空间
String line_str = null;
while ((line_str = buffer_reader.readLine()) != null) {
String[] lines = line_str.split(regexStr);
fileData.put(lines);
}
} catch (Exception e) {
try {
buffer_reader.close();
} catch (Exception e1) {
}
try {
input.close();
} catch (Exception e1) {
}
LOGGER.error("读取TXT文件失败{}",e);
}
}
}
二、后端写
public void run() {
File file = new File("X:/new.txt");
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
try {
bufferedWriter.write("hello,world!\nI like the world!");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
三、前后端配合预览
  1、controller类中
 
public ResponseEntity<byte[]> previewFile(@RequestBody FileVO fileVO) {
        if(fileVO == null || fileVO.getId() == null){
return null;
}
String filename =
fileVO.getFileName();
byte[] buffer = getTxTBytes(fileVO,30);
    HttpHeaders headers = new HttpHeaders();
        //防止中文名乱码
//filename = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
try {
headers.setContentDispositionFormData("attachment", filename=java.net.URLEncoder.encode(filename, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
headers.add(HttpHeaders.CONTENT_TYPE,"application/octet-stream;charset=UTF-8");
headers.add("file-type",smsTaskFile.getFileType());
//返回
return new ResponseEntity<byte[]>(buffer, headers, HttpStatus.CREATED);
}
   private byte[] getTxTBytes(FileVO fileVO, int preLines) {
  byte[] fileBuffer = null;
  int readLine = 0;
  InputStreamReader reader = null;
  BufferedReader buffer_reader = null;
  try {
   reader = new InputStreamReader(new FileInputStream(fileVO.getFilePath()), Charset.forName("UTF-8"));
       buffer_reader = new BufferedReader(reader, 20480); // 2MB 缓存空间
      String line_str = null;
          StringBuilder content = new StringBuilder("");
   while ((line_str = buffer_reader.readLine()) != null && readLine < preLines) {
   content.append(line_str).append("\n");
   readLine++;
   }
   fileBuffer = content.toString().getBytes(StandardCharsets.UTF_8);
   } catch (Exception e) {
   try {
   buffer_reader.close();
   } catch (Exception e1) {
   }
   try {
   reader.close();
   } catch (Exception e1) {
   }
   LOGGER.error("读取TXT文件失败{}",e);
   }
   return fileBuffer;
  }
  2、vue
<el-button v-if="item.key == 'operate'" @click.stop="taskfilePreview(scope.row)" type="text" size="small">预览</el-button>

<el-dialog-side :visible="showPreviewFile" @close="showPreviewFile = false;fileContent=''">
  <h1>只预览文件前30行</h1><br>
<el-card>
<el-input v-if="fileContent"
v-model="fileContent"
show-word-limit
:autosize="{ minRows: 12}"
type="textarea"
></el-input>
</el-card>
</el-dialog-side>

taskfilePreview(row){
const reader = new FileReader();
  //通过readAsArrayBuffer将blob转换为ArrayBuffer对
Actions.previewFile(row).then(res => {
if (res.data) {
reader.readAsText(res.data) // 这里的res.data是blob文件流
reader.onload = (event) => {
var data = event.target.result;
this.showPreviewFile = true
this.fileContent = data
}
}
})
}
 

标签:java,读取,各种类型,buffer,try,reader,catch,new,null
From: https://www.cnblogs.com/dujiudizhimo/p/17648720.html

相关文章

  • java 读取各种类型的文件 (二)
    1、Filefile=newFile();参数可以是文件夹路径,也可以是文件路径;当newFile()之后只是先在内存中创建了File对象,还没有在磁盘上创建具体文件文件夹;如果参数中的文件或者文件夹已经存在的话,那么File的属性就按已存在的文件或者文件夹赋值;如果不存在则除了文件名......
  • 爬虫之争:Python还是Java?
    在爬虫的世界里,选择合适的编程语言是关键之一。但是面对众多选择,你是选择Python还是Java呢?本文将为你分析Python和Java在爬虫领域的优势与劣势,帮助你做出选择。PythonPython作为一种高级编程语言,简洁明了的语法让人爱不释手。以下是Python在爬虫领域的优势:1.简洁易学:Python语法简单......
  • Java 获取Html标签中各属性值
    该方式适用于取任何标签的任何属性只要对应替换标签名和属性。publicstaticSet<String>getImgStr(StringhtmlStr){Set<String>pics=newHashSet<String>();Stringimg="";Patternp_image;Matcherm_image;StringregEx_img="<......
  • java-将列表格式化成json字符串
    List<String>list=newArrayList<>();list.add("{'county':'china','age':18}");list.add("{'county':'japan','age':28}");......
  • 【腾讯云 TDSQL-C Serverless 产品体验】 使用 Python 向 TDSQL-C 添加读取数据 实现
    前言TDSQL-CMySQL版(TDSQL-CforMySQL)是腾讯云自研的新一代云原生关系型数据库。融合了传统数据库、云计算与新硬件技术的优势,为用户提供具备高弹性、高性能、海量存储、安全可靠的数据库服务。TDSQL-CMySQL版100%兼容MySQL5.7、8.0。实现超百万级QPS的高吞吐,最高PB级智......
  • 直播网站程序源码,Java实现图片压缩
    直播网站程序源码,Java实现图片压缩1、Thumbnailator简介    对于图片处理,JDK中也提供了对应的工具类,不过处理起来会很麻烦,而Thumbnailator是一个Google开源的优秀图片处理的第三方Java类库,处理效果远比JavaAPI的好。    Thumbnailator可以使用很少的代码实现......
  • java多线程使用详解与案例,超详细
    一、创建线程的方式1、继承Thread类让子类继承Thread线程类子类必须重写Thread类的run方法创建一个自己定义的线程对象调用start()方法启动线程//测试类/***1、让子类继承Thread线程类*/publicclassThreadTest1extendsThread{//2、子类必须重写Thread类......
  • python读取shapefile
     #!/usr/bin/envpython#coding:utf-8#AutorGaoSong#读取shp数据importosimporttkinterimporttkinter.messageboximporttkinter.filedialogfromosgeoimportgdalfromosgeoimportosrfromosgeoimportogrfromosgeoimportgdalconstclassARCVIE......
  • Java反射机制
    Reflection是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得Java类中各成员的名称并显示出来。Java的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。......
  • Java 多线程处理 for 循环数据
    对于必须在for循环内进行查询的场景,可采用以下几种方式进行优化。1、主线程与子线程无先后顺序publicstaticvoidmain(String[]args)throwsInterruptedException{for(inti=0;i<5;i++){ThreadUtil.execAsync(()->{......