java io 读取输出文件中文乱码问题

java io 读取输出文件中文乱码问题。windows系统没有问题。服务器是linux,输出就是乱码。
[b]问题补充:[/b]
源码,大家看下
[b]问题补充:[/b]
现实页面!!
[b]问题补充:[/b]
...............
[b]问题补充:[/b]
所有方法都试了,还是不行 :cry:
[b]问题补充:[/b]
问题解决了,谢谢各位。
闭着眼来吧,谁也别怪我啊
抽到谁是谁

13个回答

解决方法应该是比较简单的

1.源字符串编码
2.传输过程中的编码
3.结果字符串编码

只要这三种做到一致,就不会有问题。
在从流中读数据时,最好使用byte数组,这样的好处是可以支持任何编码格式。

看看你Linux服务器编码是什么,包含中文字符集么

windows系统一般都是中文版本,当然默认字符就是gb2312,中文当然不会乱码
所以,读取文件的时候最好指定字符编码

InputStreamReader inread = new InputStreamReader(new FileInputStream(fileName),encoding);

InputStreamReader inread = new InputStreamReader(new FileInputStream(fileName),"GBK");

编码问题,现在通用的编码格式是utf-8,java开发最常用的是utf8,so。。I believe it should be :
InputStreamReader inread = new InputStreamReader(new FileInputStream(fileName),"UTF-8");

把读出来的str重新转换一次
str=new String(str.getBytes("iso-8859-1"));

windows下行,linux下不行,你肯定是linux服务器的默认编码没有设置成你工程对应的编码了,应该不关你程序里面的事情了,我看你只要修改linux服务器编码就能解决问题的,我以前部署的时候也遇到过,程序里面是统一管理编码过滤的,应该能确定linux的编码有问题。关于如何修改linux编码,baidu吧,关键字linux 默认编码。

源码在哪????

把它改成用InputStreamReader inread = new InputStreamReader(new FileInputStream(fileName),"GBK");

char bytes[] = new char[1024];

在execute方法里
最前面加上
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encodin);
你调试下你保存内容时是不是乱码
应该找出乱码出现的第一位置

共13条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java读取pdf文件出现中文乱码
代码如下,读取pdf文件时,出现中文字符乱码的情况,求大神解决。。 ![图片说明](https://img-ask.csdn.net/upload/201512/01/1448957510_127034.png) package read; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import com.linuxense.javadbf.DBFField; import com.linuxense.javadbf.DBFReader; public class readDbf { public static void main(String[] args){ String filePath = "e:/20151201.DBF"; read(filePath); } public static void read(String filePath){ InputStream in = null; try { //读取pdf文件 in = new FileInputStream(filePath); //根据输入流,读取一个dbfreader实例,用来读取dbf文件信息 DBFReader reader = new DBFReader(in); //获取DBF文件中字段的个数 int couNum = reader.getFieldCount(); //输出字段的个数 System.out.println("字段个数为:"+couNum); //取出字段信息 for(int i =0;i<couNum;i++){ DBFField field = reader.getField(i); //解决字段信息乱码 String fieldName = new String(field.getName().getBytes("??"),"utf-8"); //输出字段信息 System.out.print(fieldName+" "); } System.out.println(); //取出pdf文件中的数据 Object[] rowValues; while((rowValues = reader.nextRecord())!=null){ for(int i =0;i<rowValues.length;i++){ System.out.print(rowValues[i]+" "); } System.out.println(); } } catch (Exception e) { e.printStackTrace(); }finally{ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
IO流读取文件乱码,为什么?
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ page import="java.io.*"%> <%@ page import="org.apache.struts2.ServletActionContext"%> <%@ taglib prefix="s" uri="/struts-tags" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'MyJsp.jsp' starting page </title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <s:fielderror> <s:param>account.hello</s:param> </s:fielderror><!-- 为什么这个存在时直接访问此界面时就不会报错,否则报错 --> <% //request.setCharacterEncoding("UTF-8") ; String realpath = ServletActionContext.getServletContext() .getRealPath("/upload"); try { // 创建文件输入流对象 FileInputStream is = new FileInputStream(realpath+"\\"+"nihao.doc"); // 设定读取的字节数 int n = 512; byte buffer[] = new byte[n]; // 读取输入流 while (is.read(buffer, 0, n) >0) { String str = new String(buffer); out.print(str); out.print("<br>"); } // 关闭输入流 is.close(); } catch (IOException ioe) { System.out.println(ioe); } catch (Exception e) { System.out.println(e); } %> </body> </html>
Java读取 中文都显示为乱码
package p8; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class Search { public static String getHtml(String urlString) { try { StringBuffer html = new StringBuffer(); URL url = new URL(urlString); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); InputStreamReader isr = new InputStreamReader(conn.getInputStream()); BufferedReader br = new BufferedReader(isr); ; String temp; while ((temp = br.readLine()) != null) { html.append(temp).append("\n"); } br.close(); isr.close(); return html.toString(); } catch (Exception e) { e.printStackTrace(); return null; } } public static void main(String[] args) { System.out.println(Search.getHtml("https://www.hao123.com/")); } } 最后的结果中中文都是乱码,怎么解决?
readUTF()使用报 java.io.EOFException异常
今天在编程的时候,用到了DataInPutStream类的readUTF()方法时报了个异常,查了好多资料也不能解决,求大神指点啊.高分悬赏. ``` package IO流; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class DataTest { /** * 数据输入输出流 * */ public static void main(String[] args) throws IOException { //向指定文件中写入数据 //打开文件输出流 FileOutputStream fos=new FileOutputStream("G://word.txt"); //将此输出流链接到指定基础输出流DataOutPutStream DataOutputStream dos=new DataOutputStream(fos); //写入数据: dos.writeBytes("我是大禹!");//用此方法写入的数据用记事本打开是乱码 dos.writeChars("我治水!");//用此方法写入的数据用记事本打开是乱码 dos.writeUTF("你智障吗?"); //关闭流 fos.close(); //从文件中读取数据 //首先打开文件输入流 FileInputStream fis=new FileInputStream("G://word.txt"); //将此输入流连接到基本数据输入流DataInPutStream DataInputStream dis=new DataInputStream(fis); //开始读取数据啦 // String s=dis.readUTF(); System.out.println(dis.readUTF()); dis.close(); } } ``` 异常信息: Exception in thread "main" java.io.EOFException at java.io.DataInputStream.readFully(DataInputStream.java:180) at java.io.DataInputStream.readUTF(DataInputStream.java:592) at java.io.DataInputStream.readUTF(DataInputStream.java:547) at IO流.DataTest.main(DataTest.java:35)
一个关于java io流的编码问题
如上图的代码中,视频老师说不采用字符流会出现乱码,因为中文占两个字节,要是字节流读取的话一次只读取一个字节, 但是要是英文与中文同时存在的时候,按照上面的逻辑英文不就会产生乱码吗? 希望大家能给我解答一下,在这里表示感谢,百度上的答案与此问题并不相对应,并非伸手党, 再次感谢大家!!!
如何使用Java.io的io流读取全部数据和一行数据和某列数据(这些数据不能出现乱码)
下面是C++数据文件的数据数据结构 struct scadalssjEX //历史事件数据结构 { __int32 bh ; //编号 __int32 ch ; //厂号 __int32 xh ; //点号 char cm[ 40 ] ; //厂名 char dm[ 60 ] ; //点名 char date[ 20 ] ; //日期 char time[ 20 ] ; //时间 char ms[ 120 ] ; //描述 char CITY[24] ; //城市名称 char province[30]; //省名 char LineName[24]; //线路名 char sjclass[ 20 ] ; //事件类别 char by[ 20 ] ; //备用 巡检中改成汇报人星迷 __int32 by1 ; //备用 __int32 del ; //删除标记(未被删除=-999) char DeviceName[28] ; //设备名称(改成资产编号) char JD_Name[20]; //接单人姓名 char JD_Time[20]; //接单时间或派单时间 __int32 JD_CL ; //接档处理结果 0 =未处理 1=正在处理 3=已经处理 char JD_CL_Image[40]; //接单处理照片文件名 char JD_CL_BG[40]; //接单处理报告文件名 __int32 BY3 ; //备用 char BY_String[40] ; //备用 改为工单号(组成:YYYYMMDDHHNNSSZZZ+测量点号8个字符) char Title[40] ; //标题 改为派单人姓名 char QX_TIME[20]; //抢修时间 char QX_Name[ 20] ; //抢修人员姓名 char JG_Name[40]; //监管人员姓名 char QX_NR[512] ; //抢修内容 char QX_JG[512] ; //抢修结果 char WCQJ_TIME[20] ; //完成抢修时间 }; 数据文件在百度网盘中 https://pan.baidu.com/s/14tgrnJHeSDvkVr9yT48KGA
这是我整理的从文件夹中读取所有txt文件,并读取里面内容的java程序,问什么读出来的汉字是乱码?
import java.io.BufferedReader; import java.io.File; import java.io.FileFilter; import java.io.FileReader; import java.io.IOException; import java.nio.CharBuffer; import java.util.ArrayList; import java.util.List; public class Evaluation /*implements Runnable*/{ private File file = null; public static void main(String[] args) throws Exception{ String FILE_IN = "E:\\myImage"; File f = new File(FILE_IN); List<String> list = new ArrayList<String>(); list = getFileList(f); String text=null; System.out.println(list.size()); for (String l : list) { text=getTextFromTxt(l); System.out.println(text.toString()); } } public static List<String> getFileList(File file) { List<String> result = new ArrayList<String>(); if (!file.isDirectory()) { //System.out.println(file.getAbsolutePath()); result.add(file.getAbsolutePath()); } else { File[] directoryList = file.listFiles(new FileFilter() { public boolean accept(File file) { if (file.isFile() && file.getName().indexOf("txt") > -1) { return true; } else { return false; } } }); for (int i = 0; i < directoryList.length; i++) { result.add(directoryList[i].getPath()); } } return result; } public static String getTextFromTxt(String filePath) throws Exception { FileReader fr = new FileReader(filePath); BufferedReader br = new BufferedReader(fr); StringBuffer buff = new StringBuffer(); String temp = null; while ((temp = br.readLine()) != null) { buff.append(temp + "\r\n"); } br.close(); return buff.toString(); } } ``` 输出结果: 4 鍘嬬缉璁?鏂囦欢鍚嶏細88073 鏂囨湰妗嗘暟锛? 杈撳嚭瀛楃鏁帮細3 鏃堕棿:109.71428571428572 璧甸兘鎶?鏂囦欢鍚嶏細87769 鏂囨湰妗嗘暟锛? 杈撳嚭瀛楃鏁帮細3 鏃堕棿:117 ```
InputStream 乱码问题
package ioliu; import java.io.*; public class TestInputStream { public static void main(String[] args) throws Exception{ InputStream is = new FileInputStream("D:\\xunlei\\TestSocket.txt");//字节流 int ch; ch = is.read();//从输入流中读取数据的下一个字节。 while(-1 != is.read()) { System.out.printf("%c", ch); ch = is.read(); is.close(); } /*出现丢失,乱码 * ipr aai.; motjv.e.; ulccasTsSce ulcsai odmi(tig]ag)trw xeto,IEcpin{ okts e okt"2..."66) OtuSra s=s.eOtuSra(; aaupttemds=nwDtOtuSra(s; o.rtUF"el,evr)/×?? §??? o.ls(; o.ls(; tcoe) } */ import java.io.*; //这样能正确读出来,这是为什么 public class TestInputStream { public static void main(String[] args) throws Exception{ InputStream is = new FileInputStream("D:\\xunlei\\TestSocket.txt");//字节流 //byte[] b=new byte[1000]; //创建合适文件大小的字节数组 is.read(b); //读取文件中的内容到b[]数组 is.close(); System.out.println(new String(b)); } } /* import java.io.*; import java.net.*; public class TestSocket { public static void main(String[] args) throws Exception, IOException { Socket st = new Socket("127.0.0.1",6666); OutputStream os = st.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); dos.writeUTF("hello,server");//阻塞式 效率较低 dos.flush(); dos.close(); st.close(); } } */
java根据模板修改内容后,生成word,修改后内容中文乱码
Java code package com.sunyard.test; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; public class OperatorRTF { /** * 字符串转换为rtf编码 * * @param content * @return */ public String strToRtf(String content) { try { System.out.println(content); content=new String(content.getBytes(),"GB2312"); System.out.println(content); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } char[] digital = "0123456789ABCDEF".toCharArray(); StringBuffer sb = new StringBuffer(""); byte[] bs = null; bs = content.getBytes(); int bit; for (int i = 0; i < bs.length; i++) { bit = (bs[i] & 0x0f0) >> 4; sb.append("\\'"); sb.append(digital[bit]); bit = bs[i] & 0x0f; sb.append(digital[bit]); } return sb.toString(); } /** * 替换文档的可变部分 * * @param content * @param replacecontent * @param flag * @return */ public String replaceRTF(String content, String replacecontent, int flag) { String rc = strToRtf(replacecontent); String target = ""; System.out.println(rc); if (flag == 0) { target = content.replace("$timetop$", rc); } if (flag == 1) { target = content.replace("$info$", rc); } if (flag == 2) { target = content.replace("$idea$", rc); } if (flag == 3) { target = content.replace("$advice$", rc); } if (flag == 4) { target = content.replace("$infosend$", rc); } return target; } /** * 获取文件路径 * * @param flag * @return */ public String getSavePath() { String path = "D:\\"; File fDirecotry = new File(path); if (!fDirecotry.exists()) { fDirecotry.mkdirs(); } return path; } /** * 半角转为全角 */ public String ToSBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == 32) { c[i] = (char) 12288; continue; } if (c[i] < 127) { c[i] = (char) (c[i] + 65248); } } return new String(c); } public void rgModel(String username, String content) { /* 构建生成文件名 targetname:12时10分23秒_username_记录.rtf */ Date current = new Date(); SimpleDateFormat sdf = new java.text.SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); String targetname = sdf.format(current).substring(11, 13) + "时"; targetname += sdf.format(current).substring(14, 16) + "分"; targetname += sdf.format(current).substring(17, 19) + "秒"; targetname += "_" + username + "_记录.doc"; /* 字节形式读取模板文件内容,将结果转为字符串 */ String strpath = getSavePath(); String sourname = strpath + "\\" + "档案利用登记单.rtf"; String sourcecontent = ""; InputStream ins = null; try { ins = new FileInputStream(sourname); byte[] b = new byte[1024]; if (ins == null) { System.out.println("源模板文件不存在"); } int bytesRead = 0; while (true) { bytesRead = ins.read(b, 0, 1024); // return final read bytes // counts if (bytesRead == -1) {// end of InputStream System.out.println("读取模板文件结束"); break; } // convert to string using bytes sourcecontent += new String(b, 0, bytesRead); } } catch (Exception e) { e.printStackTrace(); } /* 修改变化部分 */ String targetcontent = ""; /** * 拆分之后的数组元素与模板中的标识符对应关系 array[0]:timetop array[1]:info array[2]:idea * array[3]:advice array[4]:infosend */ String array[] = content.split("~"); // 2008年11月27日:更新模板之后时间无需自动填充 for (int i = 0; i < array.length; i++) { if (i == 0) { targetcontent = replaceRTF(sourcecontent, array[i], i); } else { targetcontent = replaceRTF(targetcontent, array[i], i); } } /* 结果输出保存到文件 */ try { FileWriter fw = new FileWriter(getSavePath() + "\\" + targetname, true); PrintWriter out = new PrintWriter(fw); System.out.println(targetcontent); if (targetcontent.equals("") || targetcontent == "") { out.println(sourcecontent); } else { out.println(targetcontent); } out.close(); fw.close(); System.out.println(getSavePath() + " 该目录下生成文件" + targetname + " 成功"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { OperatorRTF oRTF = new OperatorRTF(); // 被替换内容以"~"符号分割,处理的时候将其拆分为数组即可 String content = "2008Y10M12D9H-2008Y10M12D6H~idea~look~我们参照检验药品的方法~we"; oRTF.rgModel("cheney", content); } } 上面的代码是我在网上找到的一种java操作word的方法 java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件表面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。 ----- 实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。 ----- 实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。 1、采用字节的形式读取rtf模板内容 2、将可变的内容字符串转为rtf编码 3、替换原文中的可变部分,形成新的rtf文档 这是原作者的想法,可我在使用过程中,发现替换内容中(我们参照检验药品的方法)这个中文,是不能显示的,在word里,把它转换成了iso-8859-1的编码了,不能正常显示中文,我都不知道应该在哪设置编码,才能让它正常显示,原word模板中的中文,可以正常显示,应该是在读取word模板的时候,把编码方式也读进去了,现在就是想请教一下前辈们,应该如何后,自己修改的那些中文,也可以正常显示呢 [b]问题补充:[/b] 汗,这里好象自己不能回复,所以我以这种形式回复。 先感谢一楼,二楼的回答,昨天我有事,请假没上班,所以没能及时回复,先道个歉。 先回答1楼的,在写的时候,我设置编码的话,感觉是无效的,不管我怎么设置,都没用。 再回答2楼的,特别说一下,我试了一下,发现生成的word里,那些修改部分的中文的编码形式改变了,只是还是乱码。后来我把unicode,ISO-8859-1,UTF-8,GB2312,GBK,甚至ASCII都试过了, word里都是不同形式的乱码,就是不出现汉字,真闷,我感觉是在 bs = content.getBytes("unicode"); 后,系统后来又默认的把这把转成了ISO-8859-1的形式. 可是 bs = content.getBytes("ISO-8859-1"); 我这么设置,word里的汉字是????? 真不知道为什么,要是ISO-8859-1,转ISO-8859-1,应该不会改变的哎 希望高手们,能继续解答,谢谢 [b]问题补充:[/b] 汪兆铭,您好,我不知道您一直观注这个问题,我以为要过会才能看到您的回答,所以,现在才刷新了这个页面,不好意思,先道个歉。 现在回到问题中,我照您的意思, bs = content.getBytes("unicode"); 改了一下,然后输入,可是依然不能正常显示中文,是不是,在哪,还需要再转换一次呢? [b]问题补充:[/b] mirzlm@126.com 谢谢,不知道与jdk版本或是什么的没有关系 [b]问题补充:[/b] 汪兆铭,您好,我看了一下您发的东西,我发现了问题的所在,竟然是在表格单元格里面的,就替换出来的是乱码,在表格单元格外面的,是可以正常显示的,您可以去试试,把替换的那个,放在表格里,看看,会不会成功,谢谢你的帮助 [b]问题补充:[/b] 谢谢您,给我这么多的帮助,那应该是我的那个rtf模板的问题了,真的很感谢,谢谢,谢谢,再谢谢
JDBC读取数据库中文表名乱码
import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class XmlNameWriter { /** * 利用dom4j生成XML * * @author Daniel Cheng */ static Logger logger=Logger.getLogger(XmlNameWriter.class.getClass()); public void createXML() { PropertyConfigurator.configure ( "D:\\workspace\\testlog4j.properties" ) ; String driver="com.mysql.jdbc.Driver"; String url="jdbc:mysql://localhost:3306/zczh?characterEncoding=gbk"; String username="root"; String password="233111"; Connection conn=null; Document doc = DocumentHelper.createDocument(); Element rootEle = doc.addElement("tables"); try{ Class.forName(driver); conn=DriverManager.getConnection(url, username, password); ResultSet rs=null; DatabaseMetaData dbmd=conn.getMetaData(); rs=dbmd.getTables(null, null, null, null); while(rs.next()){ [b]Element nameEle = rootEle .addElement("table"); String tablename=rs.getString(3); nameEle.setText(tablename); logger.debug(tablename+"表名已读取到");[/b]//此处获取的中文表名乱码,我在论坛里找了几个设置字符集的方法,试了之后依然乱码。怎样解决? } if(rs!=null){ rs.close(); } }catch(SQLException e){ logger.error(e.getMessage()); }catch(ClassNotFoundException e){ logger.error("error:"+e.getMessage()); }finally{ if(conn!=null){ try{ conn.close(); }catch(SQLException e){ logger.error("error:"+e.getMessage()); } } } try { Writer out = new FileWriter("tables.xml"); //格式化输出,类型IE浏览一样 OutputFormat format = OutputFormat.createPrettyPrint(); //OutputFormat format = OutputFormat.createCompactFormat(); format.setEncoding("gbk"); //创建写出对象 XMLWriter writer = new XMLWriter(out, format); writer.write(doc); writer.close(); System.out.println("生成tables.xml成功。"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("失败了。"); } } public static void main(String[] args) { new XmlNameWriter().createXML(); } }
关于JSp中表单内容提交后的乱码的问题
这是我开头的设置 <%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import="java.io.*"%> <%@ page import="java.util.*"%> 中间又写了 <%request.setCharacterEncoding("GBK");%>//防止乱码 最后一部分代码是 <% Scanner scan=new Scanner(new FileInputStream(file),"GBK"); scan.useDelimiter("\n"); StringBuffer buf=new StringBuffer(); while(scan.hasNext()) { buf.append(scan.next()).append("<br>"); } scan.close(); %> <%=buf%> 其中file文件,保存了表单提交后的信息,file文件中的信息没有乱码 全程设置为GBK,就是为了防止出现乱码·,结果数据读取,buf居然还是乱码 请高人指教····
java FileReader使用的时候不能正确的显示中文字符,希望大牛帮忙看看
下面是我的源代码,我用了下面几种方式进行编辑,运行的结果都有乱码,我真是想不明白了,请大牛帮我看看。 第一种方式编译 E:\java\8>javac -encoding utf-8 TestFileReader.java 第二种方式编译 E:\java\8>javac -encoding gbk TestFileReader.java 第三种方式编译 E:\java\8>javac -encoding gb2312 TestFileReader.java 第四种方式编译 E:\java\8>javac -encoding iso-8859-1 TestFileReader.java import java.io.*; public class TestFileReader{ public static void main(String[] args){ FileReader fr = null; try{ fr = new FileReader("e:\\java\\8\\TestFileReader.java"); }catch(FileNotFoundException e){ System.out.println("没有找到制定的文件!"); System.exit(-1); } int c = 0;//当前读取的字符 int num = 0;//读取的字符总数 try{ while((c=fr.read())!=-1){ System.out.print((char)c); num ++; } System.out.println("读取的字符总数:" + num ); } catch(IOException e){ System.out.println("读取文件错误!"); System.exit(-1); } } }
JAVA字节流复制文本的内容到另个文本。请大神指点
出现报错byte words[] =new char[1024]; 改后byte words[] =new byte[1024];复制是成功但内容是乱码。 package Test2; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * @param args * 上机练习2:(复制文本文件)247页 */ public class FileInorOut2 { public static void main(String[] args) { //声明流对象 FileInputStream fis=null; FileOutputStream fos=null; try { //1、创建输入流对象,负责读取内容 fis=new FileInputStream("G:/我的青春谁做主.txt"); //2、创建输出流对象,将写入内容 fos=new FileOutputStream("E:/myFile/myPrime.txt"); //3、创建中转站数组,存放每次读取的内容 byte words[] =new byte[1024]; //4、通过循环实现文件读写 while ((fis.read())!=-1) { fis.read (words); //读取文件 fos.write(words,0,words.length);//写入文件 } System.out.println("内容复制成功!"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //5、关闭流 try { if (fis!=null) { fos.close(); } if (fos!=null) { fis.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
各位大神,为啥我这个程序运行之后会乱码?怎么样才能不乱码?
代码运行之后成这样了 ![图片说明](https://img-ask.csdn.net/upload/201604/14/1460602344_472443.png) 下面是代码 package demo12.datademo; import java.io.DataOutputStream ; import java.io.File ; import java.io.FileOutputStream ; public class DataOutputStreamDemo{ public static void main(String args[]) throws Exception{ // 所有异常抛出 DataOutputStream dos = null ; // 声明数据输出流对象 File f = new File("d:" + File.separator + "order.txt") ; // 文件的保存路径 dos = new DataOutputStream(new FileOutputStream(f)) ; // 实例化数据输出流对象 String names[] = {"衬衣","手套","围巾"} ; // 商品名称 float prices[] = {98.3f,30.3f,50.5f} ; // 商品价格 int nums[] = {3,2,1} ; // 商品数量 for(int i=0;i<names.length;i++){ // 循环输出 dos.writeChars(names[i]) ; // 写入字符串 dos.writeChar('\t') ; // 写入分隔符 dos.writeFloat(prices[i]) ; // 写入价格 dos.writeChar('\t') ; // 写入分隔符 dos.writeInt(nums[i]) ; // 写入数量 dos.writeChar('\n') ; // 换行 } dos.close() ; // 关闭输出流 } }; package demo12.datademo; import java.io.DataInputStream ; import java.io.File ; import java.io.FileInputStream ; public class DataInputStreamDemo{ public static void main(String args[]) throws Exception{ // 所有异常抛出 DataInputStream dis = null ; // 声明数据输入流对象 File f = new File("d:" + File.separator + "order.txt") ; // 文件的保存路径 dis = new DataInputStream(new FileInputStream(f)) ; // 实例化数据输入流对象 String name = null ; // 接收名称 float price = 0.0f ; // 接收价格 int num = 0 ; // 接收数量 char temp[] = null ; // 接收商品名称 int len = 0 ; // 保存读取数据的个数 char c = 0 ; // '\u0000' try{ while(true){ temp = new char[200] ; // 开辟空间 len = 0 ; while((c=dis.readChar())!='\t'){ // 接收内容 temp[len] = c ; len ++ ; // 读取长度加1 } name = new String(temp,0,len) ; // 将字符数组变为String price = dis.readFloat() ; // 读取价格 dis.readChar() ; // 读取\t num = dis.readInt() ; // 读取int dis.readChar() ; // 读取\n System.out.printf("名称:%s;价格:%5.2f;数量:%d\n",name,price,num) ; } }catch(Exception e){} dis.close() ; } };
eclipse生成xml文件编码错误问题,,
eclipse项目中编码是GBK,生成的xml文件是utf-8 利用dom4j ``` XMLWriter out = new XMLWriter(new FileOutputStream(new File("src/xml/users1.xml")),format); ```用字节流就正常, 而用 ```XMLWriter out = new XMLWriter(new FileWriter(new File("src/xml/users1.xml")),format); ``` 是怎么原理。我的理解是在字节输出流中,我读取的是GBK的编码的字节然后输出UTF-8编码的文件中,这才应该会乱码啊。 而我FileWriter读取的字符,再输出字符(即:由GBK编码的字节 转换成UTF-8编码的字节),反而成乱码了?? 对过去知识产生了混淆,求助。
带logo的二维码解析出来是乱码
我操网上找了一个生成二维码的,可是一直找不到原因为何第二个带logo的二维码解析出来是乱码呀 ``` package com.qrcode; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import jp.sourceforge.qrcode.QRCodeDecoder; import jp.sourceforge.qrcode.data.QRCodeImage; public final class DecodeImgQrcode { public static String decodeImg(File imgFile){ BufferedImage image = null; String content = null; try { image = ImageIO.read(imgFile); QRCodeDecoder decoder = new QRCodeDecoder(); content = new String(decoder.decode(new CodeImg(image)),"utf-8"); } catch (Exception e) { System.out.println("二维码解析失败!"+e.getMessage()); e.printStackTrace(); } return content; } } final class CodeImg implements QRCodeImage{ private BufferedImage image; public CodeImg(BufferedImage image) { super(); this.image = image; } @Override public int getHeight() { return image.getHeight(); } @Override public int getPixel(int x, int y) { return image.getRGB(x, y); } @Override public int getWidth() { return image.getWidth(); } public BufferedImage getImage() { return image; } public void setImage(BufferedImage image) { this.image = image; } } ``` ``` package com.qrcode; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.OutputStream; import javax.imageio.ImageIO; import com.swetake.util.Qrcode; /** * 通过qrcode实现二维码 * * @author tskk * @version 2015-6-28 23:15:11 * */ public final class EncodeImgQrcode { /** * 绘制二维码 * * @param contents二维码内容 * @return image 二维码图片 * */ public static BufferedImage encodeImg(String contents) { BufferedImage image = null; try { Qrcode qrcode = new Qrcode(); /* * 二维码的纠错级别(排错率),共有四级:可选L(7%)、M(15%)、Q(25%)、H(30%)(最高H)。 * 纠错信息同样存储在二维码中,纠错级别越高,纠错信息占用的空间越多,那么能存储的有用信息就越少,对二维码清晰度的要求越小 */ qrcode.setQrcodeErrorCorrect('M'); // 编码模式:Numeric 数字, Alphanumeric 英文字母,Binary 二进制,Kanji 汉字(第一个大写字母表示) qrcode.setQrcodeEncodeMode('B'); /* * 二维码的版本号:也象征着二维码的信息容量;二维码可以看成一个黑白方格矩阵,版本不同,矩阵长宽方向方格的总数量分别不同。 * 1-40总共40个版本,版本1为21*21矩阵,版本每增1,二维码的两个边长都增4; 版本2 * 为25x25模块,最高版本为是40,是177*177的矩阵; */ qrcode.setQrcodeVersion(7); // 获取内容的字节数组,设置编码格式 byte[] contentBytes = contents.getBytes("utf-8"); // 图片尺寸,会根据version的变大,而变大,自己需要计算 int imgSize = 139; image = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB); // 获取画笔 Graphics2D gs = image.createGraphics(); // 设置背景色 白色 gs.setBackground(Color.WHITE); gs.clearRect(0, 0, imgSize, imgSize); // 设定图像颜色 黑色 gs.setColor(Color.BLACK); // 设置偏移量,不设置可能导致二维码生产错误(解析失败出错) int pixoff = 2; // 二维码输出 if (contentBytes.length > 0 && contentBytes.length < 150) { boolean[][] code = qrcode.calQrcode(contentBytes); int codeLen = code.length; for (int i = 0; i < codeLen; i++) { for (int j = 0; j < codeLen; j++) { if (code[j][i]) { gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3); } } } } else { System.out .println("This is content bytes length not in [0,150]."); } gs.dispose(); image.flush(); } catch (Exception e) { System.out.println("生成二维码失败" + e.getMessage()); } return image; } /** * 二维码输出到文件 * * @param contents * 二维码内容 * @param format * 图片格式 * @param file * 输出文件 * */ public static void writeToFile(String contents, String format, File file) { BufferedImage image = encodeImg(contents); try { ImageIO.write(image, format, file); } catch (IOException e) { System.out.println("二维码写入文件失败" + e.getMessage()); } } /** * 二维码流式输出 * * @param contents * 二维码内容 * @param format * 图片格式 * @param stream * 输出流 * */ public static void writeToStream(String contents, String format, OutputStream stream) { BufferedImage image = encodeImg(contents); try { ImageIO.write(image, format, stream); } catch (IOException e) { System.out.println("二维码写入流失败" + e.getMessage()); } } } ``` ``` package com.qrcode; import java.io.File; public class EncodeImgQrcodeTest { public static void main(String[] args) { String contents = "3119772366"; String format = "jpeg"; File logoImg = new File("D:"+File.separator+"qianyuqianxun.jpg"); File img = new File("D:"+File.separator+"csdn.jpg"); //生成二维码 EncodeImgQrcode.writeToFile(contents, format, img); //添加logo图片 File img1 = new File("D:"+File.separator+"csdnlogo.jpg"); EncodeImgZingLogo.writeToFile(img, logoImg, format, img1); //解析二维码 String content = DecodeImgQrcode.decodeImg(img); System.out.println("1:"+content); String content1 = DecodeImgQrcode.decodeImg(img1); System.out.println("2:"+content1); } } ``` ``` package com.qrcode; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.OutputStream; import javax.imageio.ImageIO; public final class EncodeImgZingLogo { /** * 二维码绘制logo * * @param twodimensioncodeImg 二维码图片文件 * @param logoImg logo图片文件 * */ public static BufferedImage encodeImgLogo(File twodimensioncodeImg, File logoImg) { BufferedImage twodimensioncode = null; try { if (!twodimensioncodeImg.isFile() || !logoImg.isFile()) { System.out.println("输入非图片"); return null; } // 读取二维码图片 twodimensioncode = ImageIO.read(twodimensioncodeImg); // 获取画笔 Graphics2D g = twodimensioncode.createGraphics(); // 读取logo图片 BufferedImage logo = ImageIO.read(logoImg); // 设置二维码大小,太大,会覆盖二维码,此处20% int logoWidth = logo.getWidth(null) > twodimensioncode.getWidth() * 2 / 10 ? (twodimensioncode.getWidth() * 2 / 10) : logo.getWidth(null); int logoHeight = logo.getHeight(null) > twodimensioncode.getHeight() * 2 / 10 ? (twodimensioncode.getHeight() * 2 / 10) : logo.getHeight(null); // 设置logo图片放置位置 // 中心 int x = (twodimensioncode.getWidth() - logoWidth) / 2; int y = (twodimensioncode.getHeight() - logoHeight) / 2; // 右下角,15为调整值 // int x = twodimensioncode.getWidth() - logoWidth-15; // int y = twodimensioncode.getHeight() - logoHeight-15; // 开始合并绘制图片 g.drawImage(logo, x, y, logoWidth, logoHeight, null); g.drawRoundRect(x, y, logoWidth, logoHeight, 15, 15); // logo边框大小 g.setStroke(new BasicStroke(2)); // logo边框颜色 g.setColor(Color.WHITE); g.drawRect(x, y, logoWidth, logoHeight); g.dispose(); logo.flush(); twodimensioncode.flush(); } catch (Exception e) { System.out.println("二维码绘制logo失败"); } return twodimensioncode; } /** * 二维码输出到文件 * * @param twodimensioncodeImg 二维码图片文件 * @param logoImg logo图片文件 * @param format 图片格式 * @param file 输出文件 * */ public static void writeToFile(File twodimensioncodeImg, File logoImg, String format, File file) { BufferedImage image = encodeImgLogo(twodimensioncodeImg, logoImg); try { ImageIO.write(image, format, file); } catch (IOException e) { System.out.println("二维码写入文件失败" + e.getMessage()); } } /** * 二维码流式输出 * * @param twodimensioncodeImg 二维码图片文件 * @param logoImg logo图片文件 * @param format 图片格式 * @param stream 输出流 * */ public static void writeToStream(File twodimensioncodeImg, File logoImg, String format, OutputStream stream) { BufferedImage image = encodeImgLogo(twodimensioncodeImg, logoImg); try { ImageIO.write(image, format, stream); } catch (IOException e) { System.out.println("二维码写入流失败" + e.getMessage()); } } } ```
最近突发奇想用java去请求python写的接口结果出问题了
python代码如下: ``` import tornado from wtforms_tornado import Form import sys class hello(tornado.web.RequestHandler): def get(self): self.render("hello.html") class ajaxtest(tornado.web.RequestHandler): def set_default_headers(self): print("setting headers!!!") self.set_header("Access-Control-Allow-Origin", "*") self.set_header("Access-Control-Allow-Headers", "x-requested-with") self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS') def get(self): data="你好我是刘德华" #data.encode("utf-8") print("get") self.write(data) def post(self): import json res=dict( hel="你好我是刘德华", d="ee" ) json = json.dumps(res) print("post") self.write(json) ``` python的代码应该是没有问题的 问题应该出在java上因为用直接用jQuery ajax请求是完全没有问题的 java代码如下: ``` package xiaoxiaomo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLConnection; import java.util.List; import java.util.Map; public class test { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public test() { // TODO Auto-generated constructor stub } public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 Map<String, List<String>> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } public static String getEncoding(String str) { String encode = "GB2312"; try { if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是GB2312 String s = encode; return s; //是的话,返回“GB2312“,以下代码同理 } } catch (Exception exception) { } encode = "ISO-8859-1"; try { if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是ISO-8859-1 String s1 = encode; return s1; } } catch (Exception exception1) { } encode = "UTF-8"; try { if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是UTF-8 String s2 = encode; return s2; } } catch (Exception exception2) { } encode = "GBK"; try { if (str.equals(new String(str.getBytes(encode), encode))) { //判断是不是GBK String s3 = encode; return s3; } } catch (Exception exception3) { } return ""; } public static void main(String[] args) throws UnsupportedEncodingException { //发送 GET 请求 String s=test.sendGet("http://127.0.0.1:9999/ajax", "key=123&v=456"); // String str=new String(s.getBytes(),"utf-8"); String type=getEncoding(s); System.out.println("字符串的编码是:"+type); System.out.println(s); //发送 POST 请求 // String sr=test.sendPost("http://localhost:6144/Home/RequestPostString", "key=123&v=456"); // System.out.println(sr); } } ``` 执行效果如下中文乱码: ![图片说明](https://img-ask.csdn.net/upload/201805/16/1526480833_741806.png) 然后我转了字符串编码为utf-8执行结果如下最后一个字显示问号 ![图片说明](https://img-ask.csdn.net/upload/201805/16/1526480961_68315.png) 后面没有办法,我在python就把字符串转为utf-8 ![图片说明](https://img-ask.csdn.net/upload/201805/16/1526481027_280369.png) 结果执行以后编码是utf-8没错 但是还是乱码 这是咋回事啊 ![图片说明](https://img-ask.csdn.net/upload/201805/16/1526481133_525792.png)
急 在线等 谢谢!java想要读取excel中某以特定单元格的值,现在是循环读出所有的值,请帮忙修改一下
package com.excel.action; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import jxl.Workbook; import jxl.format.Alignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.Colour; import jxl.format.UnderlineStyle; import jxl.write.Label; import jxl.write.NumberFormats; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; public class JxlTable { private final static JxlTable jxlTable = new JxlTable(); public static JxlTable getInstance() { return jxlTable; } public JxlTable() { } public boolean createTable(String[][] body, String filePath,int rowLength) { boolean createFlag = true; WritableWorkbook book; try { // 根据路径生成excel文件 book = Workbook.createWorkbook(new File(filePath)); // 创建一个sheet名为"表格" WritableSheet sheet = book.createSheet("表格", 0); // 设置NO列宽度 sheet.setColumnView(1, 5); // 去掉整个sheet中的网格线 sheet.getSettings().setShowGridLines(false); Label tempLabel = null; // 表体输出 int bodyLen = body.length; String[][] bodyTempArr = body ; // 循环写入表体内容 for(int i=0;i<rowLength;i++) { for(int j=0;j<body[i].length;j++) { WritableCellFormat tempCellFormat = null; tempCellFormat = getBodyCellStyle(); if (tempCellFormat != null) { if (j == 0 || j == (bodyTempArr.length - 1)) { tempCellFormat.setAlignment(Alignment.CENTRE); } } tempLabel = new Label(1 + j, 2 + i, bodyTempArr[i][j], tempCellFormat); sheet.addCell(tempLabel); } } book.write(); book.close(); } catch (IOException e) { createFlag = false; System.out.println("EXCEL创建失败!"); e.printStackTrace(); } catch (RowsExceededException e) { createFlag = false; System.out.println("EXCEL单元设置创建失败!"); e.printStackTrace(); } catch (WriteException e) { createFlag = false; System.out.println("EXCEL写入失败!"); e.printStackTrace(); } return createFlag; } public WritableCellFormat getHeaderCellStyle() { WritableFont font = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE); WritableCellFormat headerFormat = new WritableCellFormat( NumberFormats.TEXT); try { // 添加字体设置 headerFormat.setFont(font); // 设置单元格背景色:表头为黄色 headerFormat.setBackground(Colour.YELLOW); // 设置表头表格边框样式 // 整个表格线为粗线、黑色 headerFormat.setBorder(Border.ALL, BorderLineStyle.THICK, Colour.BLACK); // 表头内容水平居中显示 headerFormat.setAlignment(Alignment.CENTRE); } catch (WriteException e) { System.out.println("表头单元格样式设置失败!"); } return headerFormat; } public WritableCellFormat getBodyCellStyle() { WritableFont font = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE); WritableCellFormat bodyFormat = new WritableCellFormat(font); try { // 设置单元格背景色:表体为白色 bodyFormat.setBackground(Colour.WHITE); // 设置表头表格边框样式 // 整个表格线为细线、黑色 bodyFormat .setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK); } catch (WriteException e) { System.out.println("表体单元格样式设置失败!"); } return bodyFormat; } /** * 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行 * @param file 读取数据的源Excel * @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1 * @return 读出的Excel中数据的内容 * @throws FileNotFoundException * @throws IOException */ public static String[][] getData(File file, int ignoreRows) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); int rowSize = 0; BufferedInputStream in = new BufferedInputStream(new FileInputStream( file)); // 打开HSSFWorkbook POIFSFileSystem fs = new POIFSFileSystem(in); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFCell cell = null; for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { HSSFSheet st = wb.getSheetAt(sheetIndex); // 第一行为标题,不取 for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { HSSFRow row = st.getRow(rowIndex); if (row == null) { continue; } int tempRowSize = row.getLastCellNum() + 1; if (tempRowSize > rowSize) { rowSize = tempRowSize; } String[] values = new String[rowSize]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (cell != null) { // 注意:一定要设成这个,否则可能会出现乱码 cell.setEncoding(HSSFCell.ENCODING_UTF_16); switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (date != null) { value = new SimpleDateFormat("yyyy-MM-dd") .format(date); } else { value = ""; } } else { value = new DecimalFormat("0").format(cell .getNumericCellValue()); } break; case HSSFCell.CELL_TYPE_FORMULA: // 导入时如果为公式生成的数据则无值 if (!cell.getStringCellValue().equals("")) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } } } in.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * 去掉字符串右边的空格 * @param str 要处理的字符串 * @return 处理后的字符串 */ public static String rightTrim(String str) { if (str == null) { return ""; } int length = str.length(); for (int i = length - 1; i >= 0; i--) { if (str.charAt(i) != 0x20) { break; } length--; } return str.substring(0, length); } public static void main(String[] args) throws Exception { File file = new File("F:/tomcat7/webapps/Excel/upload/3.xls"); String[][] result = getData(file, 1); int rowLength = result.length; System.out.println("rowLength="+rowLength); for(int i=0;i<rowLength;i++) { for(int j=0;j<result[i].length;j++) { System.out.print(result[i][j]+"\t\t"); } System.out.println(); } String[][] body = result; String filePath = "F:/tomcat7/webapps/Excel/upload/68.xls"; JxlTable testJxl = JxlTable.getInstance(); boolean flag = testJxl.createTable(body, filePath,rowLength); if (flag) { System.out.println("表格创建成功!!"); } } }
properties文件内容的unicode转换(提问)
[size=medium]在开发过程中,为了使开发出来的代码更健壮、更灵活,我们常常把一些常变的变量写 <br />入到配置文件中。而在这些配置文件中,properties文件是使用的比较多的,它不仅配置起 <br />来简单(一个key=value形式即可),而且在对文件的操作中也比较方便。 <br />&nbsp; <br />&nbsp;&nbsp;&nbsp; 由于字符的编码问题以及properties文件在国际化的使用过程中,我们常常需要将文件 <br />内容转换为unicode码。以免从文件里取出的内容为乱码。 <br /> <br />&nbsp;&nbsp;&nbsp; 解决上面问题,我们一般采用一些如 properties editor 形式的插件。现在我写了一段 <br />类似properties editor的转码程序(转换为unicode码)。大致功能是:从一个properties文件里逐行读出一字符串(有可能是注释,也有可能是 'key=value' 形式的属性配置)。然后将属性配置行的value转换为unicode码,转换完后写入到另一个文件里。 <br /><span style="color: blue"> <br />&nbsp;&nbsp;&nbsp; 现在的问题是,上面功能能完成,即可以把properties文件转换成一个内容为unicode的 <br />properties文件(后面称unicode文件)。但是,在从unicode文件读文件配置内容时候,就会报错,或根本就不能通过Properties.load(in)的形式加载文件。希望您能花点时间,帮我解决这个问题。</span> <br /> <br />&nbsp;&nbsp;&nbsp; 也许我描述的不太清楚,现在我贴出部分代码,您先看看,知道我的大概意思,然后把整 <br />个工程下载到你本地,你帮我调试一下。先说明一下,对这个问题,我研究了好几天,实在找 <br />不到解决问题的方法,才贴出的。请大家别责怪我不思考就贴出问题来。 <br /> <br /><pre name="code" class="java">package com.tja.code; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.util.LinkedList; import java.util.Properties; import java.util.Queue; import com.tja.util.StringUtil; import com.tja.util.file.CREATE_METHOD; import com.tja.util.file.FileUtil; /** * 将properties文件内容换成Unicode码形式的properties文件 * * */ public class UnicodeUtil { /** * unicode码前缀 */ private static final String UNICODE_PREFIX = "\\u"; /** * 文件内容注释标志 */ private static final String COMMENTS_PREFIX = "#"; /** * 属性(properties)文件中的等于 '=' 符号 */ private static final String EQUAL_SIGNAL = "="; public static void propFile2Unicode(String fileName) throws FileNotFoundException, IOException { //Assert.notNull(fileName); propFile2Unicode(new File(fileName),null); } /** * 将属性文件里内容转换为unicode码(只将文件里的value转换为unicode,而key值不变)。 * 实现逻辑: 逐行读取文件内容,对每行内容进行转码(转成unicode形式),对转码的内容 * 又存入一队列中。最后使用队列先进先出的特点将所有内容写入一新的文件里, * 即fileName. * @param file * 属性文件(properties文件) * @param fileName * 记录转码后内容的文件名 * @throws FileNotFoundException * @throws IOException */ public static void propFile2Unicode(File file,String fileName) throws FileNotFoundException, IOException { BufferedReader br = new BufferedReader(new FileReader(file)); String line; String unicodeValue; Queue&lt;String&gt; queue = new LinkedList&lt;String&gt;(); while((line = br.readLine())!=null) { unicodeValue = value2unicode(line); //对读出的一行内容进行转码 queue.add(unicodeValue); } br.close(); //如果没指定文件名,则将内容写入原文件里 String filePath = StringUtil.hasLength(fileName)?fileName:file.getAbsolutePath(); write2file(filePath,queue); } /** * 将一行字符串转换成unicode形式。注意,分了注释和非注释的处理,注释 * 的内容也要转换成unicode形式 * * @param str * 字符串 * @return */ public static String value2unicode(String str) { return str.startsWith(COMMENTS_PREFIX)?dealWithComments(str):dealWithNonComments(str); } /** * 对注释内容进行转换成unicode,注释符号'#'不作处理 * * @param comments * 注释字符串,形式为 '#abccom好' * @return */ public static String dealWithComments(String comments) { //Assert.notNull(comments); if(!comments.startsWith(COMMENTS_PREFIX)) { throw new IllegalArgumentException("the parameter["+comments+"] is not comments!"); } String comment = comments.substring(1); return COMMENTS_PREFIX+GBK2Unicode(comment); } /** * 对非注释的一行字符串进行unicode转码,该字符串格式要求为key=value形式 * 即如:userName=xiaoxin。否则会抛出异常 * * @param non_comments * 非注释字符串 * @return */ public static String dealWithNonComments(String non_comments) { if(null == non_comments || 0 == non_comments.trim().length()) { return ""; } if(non_comments.startsWith(COMMENTS_PREFIX)) { throw new IllegalArgumentException("the parameter["+non_comments+"] is comments!"); } int index = non_comments.indexOf(EQUAL_SIGNAL); if(index == -1) { throw new IllegalArgumentException("the parameter["+non_comments+"] has no '=' !"); } String key = non_comments.substring(0,index+1); String value = non_comments.substring(index+1); return key+GBK2Unicode(value); } /** * 将队列内容写入指定文件里 * * @param filePath * @param queue * @throws IOException */ private static void write2file(String filePath,Queue&lt;String&gt; queue) throws IOException { //Assert.hasText(filePath); FileUtil.createFullPathFile(filePath, CREATE_METHOD.OVERWRITE); while(!queue.isEmpty()) { String content = queue.poll(); FileUtil.write2File(filePath, true,null, content+"\n"); } } /** * 字符串类型转换为Unicode * @param str * @return */ public static String GBK2Unicode(String str) { if(null == str) { return ""; } StringBuffer buf = new StringBuffer(UNICODE_PREFIX); for(int i = 0;i&lt;str.length();i++) { buf.append(char2Unicode(str.charAt(i))); if(i != str.length()-1) { buf.append(UNICODE_PREFIX); } } return buf.toString(); } /** * char类型转换为Unicode * @param ch * @return */ public static String char2Unicode(char ch) { return Integer.toString(ch, 16); } public static void main(String[] args) throws FileNotFoundException, IOException { String str = "D:/bb.properties"; String str1 = "D:/cc.properties"; String ss = "项目额度"; UnicodeUtil.propFile2Unicode(new File(str),str1); String g = UnicodeUtil.GBK2Unicode(ss); System.out.println(g); InputStream in = new FileInputStream(new File(str1)); Properties p = new Properties(); p.load(in); System.out.println(p.getProperty("FMS.loader.project")); System.out.println(p.getProperty("FMS.chinese")); } } </pre> <br /> <br />&nbsp; 请大家有时间帮忙看看。哦运行报的错误如下: <br /> <br /> <span style="color: red">&nbsp;&nbsp; Exception in thread "main" java.lang.IllegalArgumentException: Malformed \uxxxx encoding. <br /> at java.util.Properties.loadConvert(Unknown Source) <br /> at java.util.Properties.load(Unknown Source) <br /> at com.tja.code.UnicodeUtil.main(UnicodeUtil.java:175)</span>[/size]<br/><strong>问题补充</strong><br/><div class="quote_title">helin 写道</div><div class="quote_div">load的时候指定编码</div> <br /> <br /> <br />恕小弟愚笨,请问load的时候怎么指定编码呢?能给点例示代码吗?
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
【资源】一个C/C++开发工程师的学习路线(已经无路可退,唯有逆风飞翔)【内附资源页】
声明: 1)该文章整理自网上的大牛和专家无私奉献的资料,具体引用的资料请看参考文献。 2)本文仅供学术交流,非商用。所以每一部分具体的参考资料并没有详细对应。如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除。 3)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 4)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。大家都共享一点点,一起为祖国科研的推进...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
神级宝库!GitHub 标星 1.2w+,Chrome 最天秀的插件都在这里啦!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个沉迷 Chrome 不能自拔的蒟蒻… 作为一个在远古时代用过什么 IE、360、猎豹等浏览器的资深器哥,当我第一次了解 Chrome 的时候,就被它的美貌给吸引住了… 就在我用了一段时间之后,我坚决的卸载了电脑上其它碍眼的浏览器,并觉得在之前的搬砖生涯中,我不配当哥,我只配是个沙雕… ...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
张朝阳回应迟到 1 分钟罚 500:资本家就得剥削员工
loonggg读完需要2分钟速读仅需 1 分钟大家我,我是你们的校长。前几天,搜狐的董事局主席兼 CEO 张朝阳和搜狐都上热搜了。原因很简单,就是搜狐出了“考勤新规”。一封搜狐对员工发布...
立即提问