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的时候怎么指定编码呢?能给点例示代码吗?
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
阿里P8数据架构师:顶级开发者都在用什么数据库?
其实从去年已经隐隐约约感觉到数据库的有变化,只是没有想到变得这么快。今年的一些事情实实在在地给了某些数据库重击,如果以前去某数据库还是喊喊,然后该用还用,今年从传统领域刮起的去某数据库的风,已经开始了,并且后面的乌云密布也看得见。 最近看一篇国外的开源产品提供厂商的一篇文字,主要是在询问了他的几百位客户后得出了下图中的2019年数据库的使用趋势。 从图中可以看出,MySQL以38.9...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
互联网公司分布式系统架构演进之路
介绍 分布式和集群的概念经常被搞混,现在一句话让你明白两者的区别。 分布式:一个业务拆分成多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上 例如:电商系统可以拆分成商品,订单,用户等子系统。这就是分布式,而为了应对并发,同时部署好几个用户系统,这就是集群 1 单应用架构 2 应用服务器和数据库服务器分离 单机负载越来越来,所以要将应用服务器和数据库服务器分离 3 应用服务...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
程序员需要了解的硬核知识之汇编语言(一)
之前的系列文章从 CPU 和内存方面简单介绍了一下汇编语言,但是还没有系统的了解一下汇编语言,汇编语言作为第二代计算机语言,会用一些容易理解和记忆的字母,单词来代替一个特定的指令,作为高级编程语言的基础,有必要系统的了解一下汇编语言,那么本篇文章希望大家跟我一起来了解一下汇编语言。 汇编语言和本地代码 我们在之前的文章中探讨过,计算机 CPU 只能运行本地代码(机器语言)程序,用 C 语言等高级语...
OpenCV-Python 绘图功能 | 七
目标 学习使用OpenCV绘制不同的几何形状 您将学习以下功能:cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等。 代码 在上述所有功能中,您将看到一些常见的参数,如下所示: img:您要绘制形状的图像 color:形状的颜色。对于BGR,将其作为元组传递,例如:(255,0,0)对于蓝色。对于灰度,只需传递...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Fiddler+夜神模拟器进行APP抓包
Fiddler+夜神模拟器进行APP抓包 作者:霞落满天 需求:对公司APP进行抓包获取详细的接口信息,这是现在开发必备的。 工具:Fiddler抓包,夜神模拟器 模拟手机 安装APP 1.下载Fiddler https://www.telerik.com/download/fiddler Fiddler正是在这里帮助您记录计算机和Internet之间传递的所有HTTP和HTTPS通信...
小白学 Python 爬虫(42):春节去哪里玩(系列终篇)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学 Python 爬虫(4):前置准备(三)Docker基础入门 小白学 Python 爬虫(5):前置准备(四)数据库基础 小白学 Python 爬虫(6):前置准备(...
一文带你看清 HTTP 所有概念
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍 通用...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
[数据结构与算法] 排序算法之归并排序与基数排序
归并排序 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 基本思想 可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
史上最牛逼的 Eclipse 快捷键,提高开发效率!
如果你在使用IDEA,请参考博主另外的一篇idea快捷键的博客。
相关热词 c# singleton c#中类的默认值是 c#各种进制之间的转换 c# 正则表达式保留汉字 c#后台跨域 c#基础代码大全 c#指定combox选择 c#关系 mono c# 相差毫秒 用c#做一个简易计算器
立即提问