「java流文件」java流文件下载

博主:adminadmin 2022-11-29 10:52:07 46

今天给各位分享java流文件的知识,其中也会对java流文件下载进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何实现java 流式文件上传

@Controller

public class UploadController extends BaseController {

private static final Log log = LogFactory.getLog(UploadController.class);

private UploadService uploadService;

private AuthService authService;

/**

* 大文件分成小文件块上传,一次传递一块,最后一块上传成功后,将合并所有已经上传的块,保存到File Server

* 上相应的位置,并返回已经成功上传的文件的详细属性. 当最后一块上传完毕,返回上传成功的信息。此时用getFileList查询该文件,

* 该文件的uploadStatus为2。client请自行处理该状态下文件如何显示。(for UPS Server)

*

*/

@RequestMapping("/core/v1/file/upload")

@ResponseBody

public Object upload(HttpServletResponse response,

@RequestParam(value = "client_id", required = false) String appkey,

@RequestParam(value = "sig", required = false) String appsig,

@RequestParam(value = "token", required = false) String token,

@RequestParam(value = "uuid", required = false) String uuid,

@RequestParam(value = "block", required = false) String blockIndex,

@RequestParam(value = "file", required = false) MultipartFile multipartFile,

@RequestParam MapString, String parameters) {

checkEmpty(appkey, BaseException.ERROR_CODE_16002);

checkEmpty(token, BaseException.ERROR_CODE_16007);

checkEmpty(uuid, BaseException.ERROR_CODE_20016);

checkEmpty(blockIndex, BaseException.ERROR_CODE_20006);

checkEmpty(appsig, BaseException.ERROR_CODE_10010);

if (multipartFile == null) {

throw new BaseException(BaseException.ERROR_CODE_20020);// 上传文件不存在

}

Long uuidL = parseLong(uuid, BaseException.ERROR_CODE_20016);

Integer blockIndexI = parseInt(blockIndex, BaseException.ERROR_CODE_20006);

MapString, Object appMap = getAuthService().validateSigature(parameters);

AccessToken accessToken = CasUtil.checkAccessToken(token, appMap);

Long uid = accessToken.getUid();

String bucketUrl = accessToken.getBucketUrl();

// 从上传目录拷贝文件到工作目录

String fileAbsulutePath = null;

try {

fileAbsulutePath = this.copyFile(multipartFile.getInputStream(), multipartFile.getOriginalFilename());

} catch (IOException ioe) {

log.error(ioe.getMessage(), ioe);

throw new BaseException(BaseException.ERROR_CODE_20020);// 上传文件不存在

}

File uploadedFile = new File(Global.UPLOAD_TEMP_DIR + fileAbsulutePath);

checkEmptyFile(uploadedFile);// file 非空验证

Object rs = uploadService.upload(uuidL, blockIndexI, uid, uploadedFile, bucketUrl);

setHttpStatusOk(response);

return rs;

}

// TODO 查看下这里是否有问题

// 上传文件非空验证

private void checkEmptyFile(File file) {

if (file == null || file.getAbsolutePath() == null) {

throw new BaseException(BaseException.ERROR_CODE_20020);// 上传文件不存在

}

}

/**

* 写文件到本地文件夹

*

* @throws IOException

* 返回生成的文件名

*/

private String copyFile(InputStream inputStream, String fileName) {

OutputStream outputStream = null;

String tempFileName = null;

int pointPosition = fileName.lastIndexOf(".");

if (pointPosition 0) {// myvedio

tempFileName = UUID.randomUUID().toString();// 94d1d2e0-9aad-4dd8-a0f6-494b0099ff26

} else {// myvedio.flv

tempFileName = UUID.randomUUID() + fileName.substring(pointPosition);// 94d1d2e0-9aad-4dd8-a0f6-494b0099ff26.flv

}

try {

outputStream = new FileOutputStream(Global.UPLOAD_TEMP_DIR + tempFileName);

int readBytes = 0;

byte[] buffer = new byte[10000];

while ((readBytes = inputStream.read(buffer, 0, 10000)) != -1) {

outputStream.write(buffer, 0, readBytes);

}

return tempFileName;

} catch (IOException ioe) {

// log.error(ioe.getMessage(), ioe);

throw new BaseException(BaseException.ERROR_CODE_20020);// 上传文件不存在

} finally {

if (outputStream != null) {

try {

outputStream.close();

} catch (IOException e) {

}

}

if (inputStream != null) {

try {

inputStream.close();

} catch (IOException e) {

}

}

}

}

/**

* 测试此服务是否可用

*

* @param response

* @return

* @author zwq7978

*/

@RequestMapping("/core/v1/file/testServer")

@ResponseBody

public Object testServer(HttpServletResponse response) {

setHttpStatusOk(response);

return Global.SUCCESS_RESPONSE;

}

public UploadService getUploadService() {

return uploadService;

}

public void setUploadService(UploadService uploadService) {

this.uploadService = uploadService;

}

public void setAuthService(AuthService authService) {

this.authService = authService;

}

public AuthService getAuthService() {

return authService;

}

}

java的几种IO流读取文件方式

一、超类:

字节流: InputStream(读入流) OutputStream(写出流)

字符流:    Reader(字符 读入流)    Writer (字符写出流)

二、文件操作流

字节流: FileInputStream  ,FileOutputStream

字符流: FileReader, FileWriter(用法与字节流基本相同,不写)

//1.指定要读 的文件目录及名称

File file =new File("文件路径");

//2.创建文件读入流对象

FileInputStream fis =new FileInputStream(file);

//3.定义结束标志,可用字节数组读取

int i =0 ;

while((i = fis.read())!=-1){

//i 就是从文件中读取的字节,读完后返回-1

}

//4.关闭流

fis.close();

//5.处理异常

//1.指定要写到的文件目录及名称

File file =new File("文件路径");

//2.创建文件读入流对象

FileOutputStream fos =new FileOutputStream(file);

//3.定义结束标志

fos.write(要写出的字节或者字节数组);

//4.刷新和关闭流

fos.flush();

fos.close();

//5.处理异常

三、缓冲流:

字节缓冲流: BufferedInputStream,BufferedOutputStream

字符缓冲流:BufferedReader ,BufferedWriter

缓冲流是对流的操作的功能的加强,提高了数据的读写效率。既然缓冲流是对流的功能和读写效率的加强和提高,所以在创建缓冲流的对象时应该要传入要加强的流对象。

//1.指定要读 的文件目录及名称

File file =new File("文件路径");

//2.创建文件读入流对象

FileInputStream fis =new FileInputStream(file);

//3.创建缓冲流对象加强fis功能

BufferedInputStream bis =new BufferedInputStream(fis);

//4.定义结束标志,可用字节数组读取

int i =0 ;

while((i = bis.read())!=-1){

//i 就是从文件中读取的字节,读完后返回-1

}

//5.关闭流

bis.close();

//6.处理异常

//1.指定要写到的文件目录及名称

File file =new File("文件路径");

//2.创建文件读入流对象

FileOutputStream fos =new FileOutputStream(file);

//3.创建缓冲流对象加强fos功能

BufferedOutputStream bos=new BufferedOutputStream(fos);

//4.向流中写入数据

bos.write(要写出的字节或者字节数组);

//5.刷新和关闭流

bos.flush();

bos.close();

//6.处理异常

四、对象流

ObjectInputStream ,ObjectOutputStream

不同于以上两种类型的流这里只能用字节对对象进行操作原因可以看上篇的编码表比照原理

ObjectOutputStream对象的序列化:

将java程序中的对象写到本地磁盘里用ObjectOutputStream

eg:将Person类的对象序列化到磁盘

创建Person类

注1:此类要实现Serializable接口,此接口为标志性接口

注2:此类要有无参的构造函数

注3:一旦序列化此类不能再修改

class Person implements Serializable{

public Person(){}

}

2.创建对象流对象

注:要增强功能可以将传入文件缓冲流

ObjectOutputStream oos =new ObjectOutputStream(

new FileOutputStream(new File("文件路径")));

3.写入对象 ,一般会将对象用集合存储起来然后直接将集合写入文件

ListPerson list =new ArrayList();

list.add(new Person());

...(可以添加多个)

oos.writeObject(list);

4.关闭流,处理异常

oos.flush();

oos.close();

五、转换流:

这类流是用于将字符转换为字节输入输出,用于操作字符文件,属于字符流的子类,所以后缀为reader,writer;前缀inputstream,outputstream;

注 :要传入字节流作为参赛

InputStreamReader: 字符转换输出流

OutputStreamWriter:字符转换输入流

//1.获取键盘输入的字节流对象

inInputStream in =Stream.in;

/*2.用转换流将字节流对象转换为字符流对象,方便调用字符缓冲流的readeLine()方法*/

InputStreamReader isr =new InputStreamReader(in);

/*5.创建字符转换输出流对象osw,方便把输入的字符流转换为字节输出到本地文件。*/

OutputStreamWriter osw =new OutputStreamWriter(new

FileOutputStream(new File("文件名")));

/*3.现在isr是字符流,可以作为参数传入字符缓冲流中*/

BufferedReader br =new BufferedReader(isr);

/*4.可以调用字符缓冲流br的readLine()方法度一行输入文本*/

String line =null;

while((line =br.readLine()){

osw.write(line);//osw是字符流对象,可以直接操作字符串

}

注:InputStreamReader isr =new InputStreamReader(new "各种类型的字节输入流都行即是:后缀为InputStream就行");

OutputStreamWriter osw =new OutputStreamWriter(new

"后缀为OutputStream就行");

六、区别记忆

1.对象流是可以读写几乎所有类型的只要是对象就行,而字节字符流,只能读写单个字节字符或者字节字符数组,以上没有读写字节字符数组的;注意对象流只有字节流!

2.字符和字节循环读入的结束条件int i=0; (i =fis.read())!=-1

用字符数组复制文件(fr 读入流 ,fw写出流),字节流也是相同的用法

int i = 0;  char[] c = new char[1024];

while((i = fr.reade()) !=-1)){

fw.write(c,0,i);

}

123456

3.对象流里面套缓冲流的情景:

new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File(“文件路径”))));

4.记忆流及其功能的方法:

前缀表示功能,后缀表示流的类型;

比如说FileInputStream  前缀:File,表示操作的磁盘,后缀:intputstream,表示是字节输入流。

同理 FileReader:表示操作文件的字符流

ObjectInputStream :操作对象的字节输入流

5.拓展:获取键盘输入的字符的缓冲流的写法:

new BufferedReader(new InputStreamReader(System.in)));

将字节以字符形式输出到控制台的字符缓冲流的写法:

new BufferedWriter( new OutputStreamWriter(System.out))

java文件流

方法一是字符流,只能写入字符串,方法二是字节流,可以是任何东西,比如图片,声音文件。

一般字符串的话,字符流方便些,如果要把图片这种写入文件的话只能用字节流。

java 如何将流文件转为swf

在java中找出万能的谷歌(Google),在谷歌中到一个叫swift-tool的一个开源项目,即可将java流文件转为swf。Swfit可以帮助你把图片、字体、声音、二进制数据等资源打包成一个swf文件(或者swc文件),你可以在运行时动态加载并访问这些资源,实现运行时共享库,减少主应用程序体积和加速下载。

java流文件的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java流文件下载、java流文件的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-29,除非注明,否则均为首码项目网原创文章,转载请注明出处。