博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
File 操作
阅读量:7005 次
发布时间:2019-06-28

本文共 6039 字,大约阅读时间需要 20 分钟。

  •  文件乱码

    服务器地址
  • try-with-resource
  • 属性文件获取
  • 文件排序
  • 文件过滤
  • 文件下载
  • 流文件传递

文件乱码:

 

WINDOWS系统桌面默认使用GBK,Linux系统默认使用UTF-8.

 

因此linux或者windows的文件名会在对应的上面乱码。

 

获取路径

 

因windows的文件路径用 \\ 表示,但也支持 / ,而linux下为/,因此尽量使用/来表示路径, 同时File文件的话,尽量使用 Files.separator.

 

Test.class.getResources("/") 在window下可以,在linux下会取得null, 应该使用 Test.class.getResources(".")形式在linux下可以,windows下报错,同时如果被打成jar包,也会取得为null 推荐: Test.class.getResources("")

 

文件名乱码

 

zipEntry使用时在windows环境下encoding为 gbk,或者gb2312.而在linux系统下为utf-8。Unix英文系统为ISO-8859-1。 new file的时候 文件名也要主要编码new String(fileName.getBytes("charset"), "UTF-8"), 而如果将linux下的文件下载到windows下,文件编码就要用gbk new String(fileName.getBytes(), "gbk")。 文件名可以用ISO-8859-1 new String(fileName.getBytes("ISO-8859-1");

 

判断系统

 

logger.debug("--sysEncode--" + System.getProperty("sun.jnu.encoding")); //操作系统编码logger.debug("--fileEncode--" + System.getProperty("file.encoding")); // 程序系统编码 String sysName = system.getParameter(""); sysName.toLowercase.firstStart("win")

 

服务器地址:

System.getProperty("catalina.home");

属性文件获取:

public static String getValueFromProperties(String key, String filePath){  Properties pro = new Properties();  String value = "";  try {    pro.load(MyFileUtils.class.getClassLoader().getResourceAsStream(filePath));    value = pro.getProperty(key);  } catch (IOException e) {    logger.error("error is occurs...", e);  }  return value;}

 

 try-with-resource:

java7新推出自动关闭的处理,对于传统的输入流和输出流在关闭时会遇到可能抛出的异常。

InputStream is = null;        try {            is= new FileInputStream("");             *****        } catch (FileNotFoundException e) {            e.printStackTrace();        } finally {            if(is != null) {                is.close();            }        } 主动抛出 IOException异常!

 

 使用try-with-resource:

try(InputStream is2= new FileInputStream("")){        ***    }

文件排序

1     /** 2      * 对文件列表进行排序 3      * @param files  4      * @param typeName 5      */ 6     @SuppressWarnings({ "unchecked", "rawtypes" }) 7     public static List
sortFileByType(File[] files, int typeName) { 8 List
fileList = (List
) Arrays.asList(files); 9 10 // 文件排序11 Collections.sort(fileList, new Comparator(){12 @Override13 public int compare(Object o1, Object o2) {14 File file1 = (File) o1;15 File file2 = (File) o2;16 if(file1.isDirectory() || file2.isDirectory()){17 return 0;18 }19 int result = 0;20 switch(typeName){21 case TYPE_NAME:22 result = StringUtils.compareIgnoreCase(file1.getName(), file2.getName()); // 按照文件大小排序23 break;24 default :25 result = 0;26 }27 return result;28 }29 });30 return fileList;31 }

 文件过滤

1     /** 2      * 过滤文件 3      * @param file 4      * @param string 5      * @return file[] 6      */ 7     public static File[] filterFileBySuffix(File file, String suffix) { 8         // 文件空判断 9         File[] fileArray = file.listFiles();10         if(fileArray.length == 0){11             return null;12         }13         /**14          * 过滤文件15          */16         return file.listFiles(new FilenameFilter(){17             @Override18             public boolean accept(File dir, String name) {19                 if(name.endsWith(suffix)){20                     return true;21                 }else{22                     return false;23                 }24             }25             26         });27     }

 文件下载:

  

boolean result = true;        InputStream is = null;        try {            is = super.getRemoteReqStream(url);            byte[] data = new byte[1024];            int length = 0;            while((length = is.read(data, 0, 1024)) != -1) {                resp.getOutputStream().write(data, 0, length);            }            resp.flushBuffer();            resp.getOutputStream().close();        } catch (ClientProtocolException e) {            result = false;            logger.error(" request client error...", e);        } catch (IOException e) {            result = false;            logger.error(" request io error...", e);        } finally {            if(is != null) {                try {                    is.close();                } catch (IOException e) {                    logger.error("is close error....", e);                }            }        }

  输出流类型设置:

    • Writer osw = new OutputStreamWriter(resp.getOutputStream(), CommonConstants.ENCODE_CHARSET_DEFAULT);
    • ByteArrayOutputStream os = new ByteArrayOutputStream();

  文件下载设置response头信息:

    response.setContentType("application/octet-stream");  //文件流形式

               response.setHeader("Content-type","text/html;charset=utf-8");  //设置contentType为text ,字符编码为utf-8

              content-type 可用文件后缀名,查找对应的mine-type填入即可。

    response.setContentLength(file.length());                                  //设置文件大小。

    response.addHeader();

              response.setCharacterEncoding("utf-8");   //字符集编码

    response.addHeader("Content-Disposition","attachment;filename=FileName.txt");  //设置文件下载,以及文件名

                                          attachment,指示浏览器进行下载

                                          inline会在浏览器中直接打开

    //告诉所有浏览器不要缓存,如果文件固定可以设置缓存  

    response.setDateHeader("expires", -1);  

    response.setHeader("Cache-control", "no-cache");  

    response.setHeader("Pragma", "no-cache");  

  java 流文件传递

Response response = null;        try {            Blob blob = attachDao.downloadAttach(attachId);            ResponseBuilder responseBuilder = Response.ok(blob.getBinaryStream(),                    MediaType.APPLICATION_OCTET_STREAM_TYPE);            responseBuilder.type(MediaType.APPLICATION_OCTET_STREAM_TYPE);             response = responseBuilder.header("content-disposition", "inline;filename=123").build();        } catch (DbException e) {            logger.error("blob error..", e);        } catch(SQLException se) {            logger.error("sql error..", se);        } return resonse;

 

 

  

 

转载于:https://www.cnblogs.com/DennyZhao/p/7344626.html

你可能感兴趣的文章