springmvc浏览器访问Controller下载文件

设置response响应信息即可(先将文件流转成byte[])@RequestMapping(value = "down1", method = RequestMethod.GET)public void downloadAllClassmate(HttpServletResponse response) throws IOException {    byte[] bytes = new byte[100];    String fileName="test.pdf";    response.setContentType("application/pdf"); //设置文件格式    response.setHeader("Content-disposition", "attachment;filename=" + fileName);//设置文件名    response.setHeader("Content-Length", "102400");//设置文件大小    response.flushBuffer();    response.getOutputStream().write(bytes); //写文件到响应体重}或者采用另一种方式@RequestMapping(value = "/down2")    public ResponseEntity<byte[]> pdfDownload(HttpServletRequest httpServletRequest, HttpServletResponse response) throws IOException {        String path = "d:/c.pdf";        File file = new File(path);        HttpHeaders httpHeaders = new HttpHeaders();        String fileName = file.getName();//        设置文件名        httpHeaders.setContentDispositionFormData("attachment", java.net.URLEncoder.encode(fileName, "UTF-8"));//        设置响应格式        httpHeaders.setContentType(MediaType.parseMediaType("application/pdf"));//        将file放在ResponseEntity中返回        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),                httpHeaders,                HttpStatus.CREATED);    }以下关于Response.ContentType 详细列表不同的ContentType 会影响客户端所看到的效果.默认的ContentType为 text/html也就是网页格式.代码如:<% response.ContentType ="text/html" %> <!--#i nclude virtual="/ContentType.html" -->显示的为网页,而<% response.ContentType ="text/plain" %> <!--#i nclude virtual="/sscript/ContentType.html" -->则会显示html原代码.以下为一些常用的 ContentTypeXML<% response.ContentType ="text/xml" %>GIF images<% response.ContentType ="image/gif" %> JPEG images<% response.ContentType ="image/jpeg" %> TIFF images<% response.ContentType ="image/tiff" %> <!--#i nclude virtual="/myimage.tiff" -->MICROSOFT WORD document<% response.ContentType ="application/msword" %> <!--#i nclude virtual="/myfile.doc" -->RTF document<% response.ContentType ="application/rtf" %> <!--#i nclude virtual="/myfile.rtf" -->MICROSOFT EXCEL document<% response.ContentType ="application/x-excel" %> <!--#i nclude virtual="/myfile.xls" -->MICROSOFT POWERPOINT document<% response.ContentType ="application/ms-powerpoint" %> <!--#i nclude virtual="/myfile.pff" -->PDF document<% response.ContentType ="application/pdf" %> <!--#i nclude virtual="/myfile.pdf" -->ZIP document<% response.ContentType ="application/zip" %> <!--#i nclude virtual="/myfile.zip" -->下面是更详细的ContentType'ez' => 'application/andrew-inset', 'hqx' => 'application/mac-binhex40', 'cpt' => 'application/mac-compactpro', 'doc' => 'application/msword', 'bin' => 'application/octet-stream', 'dms' => 'application/octet-stream', 'lha' => 'application/octet-stream', 'lzh' => 'application/octet-stream', 'exe' => 'application/octet-stream', 'class' => 'application/octet-stream', 'so' => 'application/octet-stream', 'dll' => 'application/octet-stream', 'oda' => 'application/oda', 'pdf' => 'application/pdf', 'ai' => 'application/postscript', 'eps' => 'application/postscript', 'ps' => 'application/postscript', 'smi' => 'application/smil', 'smil' => 'application/smil', 'mif' => 'application/vnd.mif', 'xls' => 'application/vnd.ms-excel', 'ppt' => 'application/vnd.ms-powerpoint', 'wbxml' => 'application/vnd.wap.wbxml', 'wmlc' => 'application/vnd.wap.wmlc', 'wmlsc' => 'application/vnd.wap.wmlscriptc', 'bcpio' => 'application/x-bcpio', 'vcd' => 'application/x-cdlink', 'pgn' => 'application/x-chess-pgn', 'cpio' => 'application/x-cpio', 'csh' => 'application/x-csh', 'dcr' => 'application/x-director', 'dir' => 'application/x-director', 'dxr' => 'application/x-director', 'dvi' => 'application/x-dvi', 'spl' => 'application/x-futuresplash', 'gtar' => 'application/x-gtar', 'hdf' => 'application/x-hdf', 'js' => 'application/x-javascript', 'skp' => 'application/x-koan', 'skd' => 'application/x-koan', 'skt' => 'application/x-koan', 'skm' => 'application/x-koan', 'latex' => 'application/x-latex', 'nc' => 'application/x-netcdf', 'cdf' => 'application/x-netcdf', 'sh' => 'application/x-sh', 'shar' => 'application/x-shar', 'swf' => 'application/x-shockwave-flash', 'sit' => 'application/x-stuffit', 'sv4cpio' => 'application/x-sv4cpio', 'sv4crc' => 'application/x-sv4crc', 'tar' => 'application/x-tar', 'tcl' => 'application/x-tcl', 'tex' => 'application/x-tex', 'texinfo' => 'application/x-texinfo', 'texi' => 'application/x-texinfo', 't' => 'application/x-troff', 'tr' => 'application/x-troff', 'roff' => 'application/x-troff', 'man' => 'application/x-troff-man', 'me' => 'application/x-troff-me', 'ms' => 'application/x-troff-ms', 'ustar' => 'application/x-ustar', 'src' => 'application/x-wais-source', 'xhtml' => 'application/xhtml+xml', 'xht' => 'application/xhtml+xml', 'zip' => 'application/zip', 'au' => 'audio/basic', 'snd' => 'audio/basic', 'mid' => 'audio/midi', 'midi' => 'audio/midi', 'kar' => 'audio/midi', 'mpga' => 'audio/mpeg', 'mp2' => 'audio/mpeg', 'mp3' => 'audio/mpeg', 'aif' => 'audio/x-aiff', 'aiff' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff', 'm3u' => 'audio/x-mpegurl', 'ram' => 'audio/x-pn-realaudio', 'rm' => 'audio/x-pn-realaudio', 'rpm' => 'audio/x-pn-realaudio-plugin', 'ra' => 'audio/x-realaudio', 'wav' => 'audio/x-wav', 'pdb' => 'chemical/x-pdb', 'xyz' => 'chemical/x-xyz', 'bmp' => 'image/bmp', 'gif' => 'image/gif', 'ief' => 'image/ief', 'jpeg' => 'image/jpeg', 'jpg' => 'image/jpeg', 'jpe' => 'image/jpeg', 'png' => 'image/png', 'tiff' => 'image/tiff', 'tif' => 'image/tiff', 'djvu' => 'image/vnd.djvu', 'djv' => 'image/vnd.djvu', 'wbmp' => 'image/vnd.wap.wbmp', 'ras' => 'image/x-cmu-raster', 'pnm' => 'image/x-portable-anymap', 'pbm' => 'image/x-portable-bitmap', 'pgm' => 'image/x-portable-graymap', 'ppm' => 'image/x-portable-pixmap', 'rgb' => 'image/x-rgb', 'xbm' => 'image/x-xbitmap', 'xpm' => 'image/x-xpixmap', 'xwd' => 'image/x-xwindowdump', 'igs' => 'model/iges', 'iges' => 'model/iges', 'msh' => 'model/mesh', 'mesh' => 'model/mesh', 'silo' => 'model/mesh', 'wrl' => 'model/vrml', 'vrml' => 'model/vrml', 'css' => 'text/css', 'html' => 'text/html', 'htm' => 'text/html', 'asc' => 'text/plain', 'txt' => 'text/plain', 'rtx' => 'text/richtext', 'rtf' => 'text/rtf', 'sgml' => 'text/sgml', 'sgm' => 'text/sgml', 'tsv' => 'text/tab-separated-values', 'wml' => 'text/vnd.wap.wml', 'wmls' => 'text/vnd.wap.wmlscript', 'etx' => 'text/x-setext', 'xsl' => 'text/xml', 'xml' => 'text/xml', 'mpeg' => 'video/mpeg', 'mpg' => 'video/mpeg', 'mpe' => 'video/mpeg', 'qt' => 'video/quicktime', 'mov' => 'video/quicktime', 'mxu' => 'video/vnd.mpegurl', 'avi' => 'video/x-msvideo', 'movie' => 'video/x-sgi-movie', 'ice' => 'x-conference/x-cooltalk'

POST/GET从远程服务器下载文件

封装的工具类,get下载调用downloadURL(url),post下载调用POSTMethod()import org.apache.commons.collections.MapUtils;import org.apache.commons.lang3.StringUtils;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.BufferedHttpEntity;import org.apache.http.entity.ByteArrayEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import java.io.ByteArrayOutputStream;import java.util.*;/** * User: Cheng * Date: 2019/4/22 * Time: 17:33 * Description: No Description */public class PostUtil {    /**     * 以Post方法访问     *     * @param url     请求地址     * @param argsMap 携带的参数     * @param content 内容     * @return String 返回结果     * @throws Exception     */    public static byte[] POSTMethod(String url, Map<String, Object> argsMap, String content) throws Exception {//        argsMap,content都可以带参,二选一        byte[] dataByte = null;        HttpClient httpClient = new DefaultHttpClient();        HttpPost httpPost = new HttpPost(url);        if (MapUtils.isNotEmpty(argsMap)) {            //设置参数            UrlEncodedFormEntity encodedFormEntity = new UrlEncodedFormEntity(setHttpParams(argsMap), "UTF-8");            httpPost.setEntity(encodedFormEntity);        }        if (StringUtils.isNotEmpty(content)) {            httpPost.setEntity(new ByteArrayEntity(content.getBytes()));        }        // 执行请求        HttpResponse httpResponse = httpClient.execute(httpPost);        // 获取返回的数据        HttpEntity httpEntity = httpResponse.getEntity();        if (httpEntity != null) {            byte[] responseBytes = getData(httpEntity);            dataByte = responseBytes;            httpPost.abort();        }        //将字节数组转换成为字符串//        String result = bytesToString(dataByte);//        return result;        return dataByte;    }    /**     * 获取Entity中数据     *     * @param httpEntity     * @return     * @throws Exception     */    public static byte[] getData(HttpEntity httpEntity) throws Exception {        BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(httpEntity);        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();        bufferedHttpEntity.writeTo(byteArrayOutputStream);        byte[] responseBytes = byteArrayOutputStream.toByteArray();        return responseBytes;    }    /**     * 设置HttpPost请求参数     * @param argsMap     * @return BasicHttpParams     */    private static List<BasicNameValuePair> setHttpParams(Map<String, Object> argsMap){        List<BasicNameValuePair> nameValuePairList = new ArrayList<BasicNameValuePair>();        //设置请求参数        if (argsMap!=null && !argsMap.isEmpty()) {            Set<Map.Entry<String, Object>> set = argsMap.entrySet();            Iterator<Map.Entry<String, Object>> iterator = set.iterator();            while(iterator.hasNext()){                Map.Entry<String, Object> entry = iterator.next();                BasicNameValuePair basicNameValuePair = new BasicNameValuePair(entry.getKey(), entry.getValue().toString());                nameValuePairList.add(basicNameValuePair);            }        }        return nameValuePairList;    }    public static byte[] downloadURL(String url) throws Exception {        byte[] dataByte = null;        HttpClient httpClient = new DefaultHttpClient();        HttpGet httpGet = new HttpGet(url);        HttpResponse httpResponse = httpClient.execute(httpGet);        HttpEntity entity = httpResponse.getEntity();//获取返回数据        if (entity != null) {//            根据entity创建BufferedHttpEntity与创建流对象            BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(entity);            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//          将BufferedHttpEntity写到流中            bufferedHttpEntity.writeTo(byteArrayOutputStream);//            将流转换成byte[]            byte[] responseBytes = byteArrayOutputStream.toByteArray();            dataByte = responseBytes;            httpGet.abort();    //(终止)程序        }        return dataByte;    }}

POST/GET从远程服务器下载文件

PDF或图片转换成Base64编码

pdf转base64参考百度经验:https://jingyan.baidu.com/article/59a015e3770f58f7948865eb.html图片/PDF转Base64首先了解下如何最简单转base64,这里用到jdk中的BASE64Encoder,其中byte[] bytes为字节数组的文件(下列代码中是图片)            BASE64Encoder encoder = new BASE64Encoder();//            encode、encodeBuffer均可,由于该方法转换的字符中含换行符//            因此使用replaceAll替换掉所有换行符            String encode1 = encoder.encodeBuffer(bytes).trim().replaceAll("\r\n","");            String encode2 = encoder.encode(bytes).trim().replaceAll("\r\n","");//            根据文件类型添加data:信息,例如下列是图片//            PDF可写成data:application/pdf;base64            System.out.println("data:image/png;base64,"+encode2);如果上述byte[] bytes数组为pdf的话即添加data:application/pdf;base64前端HTML显示PDF可以用iframe引用实现<iframe src="data:application/pdf;base64,这里是base64主体内容" style="width:100%;height:100%"></iframe>如果引用base64图片则为<img src="data:image/png;base64,***************************************************"/>PDF转图片转Base64使用Free Spire.PDF for JAVA,官网:http://e-iceblue.cn/Downloads/Free-Spire-PDF-JAVA.htmlFree Spire.PDF for JAVA是一款完全免费的PDF Java组件,开发人员可以使用它在Java应用程序中进行创建PDF、读取PDF和保存PDF等操作,并且无需安装Adobe Acrobat。        //加载PDF文件        PdfDocument doc = new PdfDocument();        doc.loadFromFile("d:/pdf/test.pdf");        //保存PDF的每一页到图片        BufferedImage image;        for (int i = 0; i < doc.getPages().getCount(); i++) {            image = doc.saveAsImage(i);            File file = new File(String.format("d:/pdf/ToImage-img-%d.png", i));//指定图片文件            ImageIO.write(image, "PNG", file);//写入图片到文件            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();            ImageIO.write(image, "png", outputStream);//也可将图片写入进流            byte[] bytes = outputStream.toByteArray();//将流转换成byte[]//            下述使用工具类来进行Base64编码            System.out.println("data:image/png;base64," + Base64Utils.encode(bytes));        }        doc.close();Base64工具类public class Base64Utils {    private static char[] base64EncodeChars = new char[]            {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',                    'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',                    'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5',                    '6', '7', '8', '9', '+', '/'};    private static byte[] base64DecodeChars = new byte[]            {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,                    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53,                    54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,                    12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29,                    30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1,                    -1, -1, -1};    public static String encode(byte[] data) {        StringBuffer sb = new StringBuffer();        int len = data.length;        int i = 0;        int b1, b2, b3;        while (i < len) {            b1 = data[i++] & 0xff;            if (i == len) {                sb.append(base64EncodeChars[b1 >>> 2]);                sb.append(base64EncodeChars[(b1 & 0x3) << 4]);                sb.append("==");                break;            }            b2 = data[i++] & 0xff;            if (i == len) {                sb.append(base64EncodeChars[b1 >>> 2]);                sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);                sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);                sb.append("=");                break;            }            b3 = data[i++] & 0xff;            sb.append(base64EncodeChars[b1 >>> 2]);            sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);            sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);            sb.append(base64EncodeChars[b3 & 0x3f]);        }        return sb.toString();    }    public static byte[] decode(String str) {        try {            return decodePrivate(str);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        return new byte[]                {};    }    private static byte[] decodePrivate(String str) throws UnsupportedEncodingException {        StringBuffer sb = new StringBuffer();        byte[] data = null;        data = str.getBytes("US-ASCII");        int len = data.length;        int i = 0;        int b1, b2, b3, b4;        while (i < len) {            do {                b1 = base64DecodeChars[data[i++]];            } while (i < len && b1 == -1);            if (b1 == -1)                break;            do {                b2 = base64DecodeChars[data[i++]];            } while (i < len && b2 == -1);            if (b2 == -1)                break;            sb.append((char) ((b1 << 2) | ((b2 & 0x30) >>> 4)));            do {                b3 = data[i++];                if (b3 == 61)                    return sb.toString().getBytes("iso8859-1");                b3 = base64DecodeChars[b3];            } while (i < len && b3 == -1);            if (b3 == -1)                break;            sb.append((char) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));            do {                b4 = data[i++];                if (b4 == 61)                    return sb.toString().getBytes("iso8859-1");                b4 = base64DecodeChars[b4];            } while (i < len && b4 == -1);            if (b4 == -1)                break;            sb.append((char) (((b3 & 0x03) << 6) | b4));        }        return sb.toString().getBytes("iso8859-1");    }}或者使用itext包效果一样,依赖如下:<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --><dependency>    <groupId>com.itextpdf</groupId>    <artifactId>itextpdf</artifactId>    <version>5.5.13</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --><dependency>    <groupId>org.apache.pdfbox</groupId>    <artifactId>pdfbox</artifactId>    <version>2.0.12</version></dependency>代码如下:import com.itextpdf.text.pdf.PdfReader;import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.rendering.PDFRenderer;import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.*;public class TEXT {    public static void main(String[] args) throws IOException {        String path = "D:/a.pdf";        File file = new File(path);        BASE64Encoder encoder = new sun.misc.BASE64Encoder();        FileInputStream is=new FileInputStream(file);        byte[] pdf=new byte[is.available()];        is.read(pdf);        is.close();        PDDocument pdDocument = PDDocument.load(pdf);        PDFRenderer renderer = new PDFRenderer(pdDocument);        PdfReader reader = new PdfReader(pdf);        int pageNum = reader.getNumberOfPages();        for (int j = 0; j < pageNum; j++) {            BufferedImage image = renderer.renderImageWithDPI(j, 100);            ByteArrayOutputStream baos = new ByteArrayOutputStream();            ImageIO.write(image, "png", baos);            baos.flush();            byte[] imageInByte = baos.toByteArray();            String base64 = encoder.encode(imageInByte).trim().replaceAll("\r\n","");            baos.close();            System.out.println("data:image/png;base64,"+base64);        }        reader.close();    }}

PDF或图片转换成Base64编码

分享几个内网穿透的免费/低价的工具

常见的有nat123跟花生壳,除此之外还有哪些免费的或者价格低的服务呢。下面介绍几款其他的,废话不多说直接贴链接:http://www.ngrok.cc 为什么使用Sunny-Ngrok?提供免费内网穿透服务,免费服务器支持绑定自定义域名管理内网服务器,内网web进行演示快速开发微信程序和第三方支付平台调试本地WEB外网访问、本地开发微信、TCP端口转发本站新增FRP服务器,基于 FRP 实现https、udp转发无需任何配置,下载客户端之后直接一条命令让外网访问您的内网不再是距离https://echosite.2bdata.com https://www.echosite.cn到EchoSite官网注册测试域名2元每月,还算实惠。服务基本上免费 。简评:随便聊聊近期试收费的内网穿透花生壳 免费使用 1月1G流量 感觉有点不够用nat123 非80端口73元一年 不过80端口有免费的Sunny-Ngrok 免费限速128k 感觉用来连远程ssh还行 收费10元不贵 但开新端口又得10元EchoSite 开新端口 网址映射都3元 只是没免费的 相比上面的便宜点NATAPP 有免费 免费的可以连ssh 收费也基本10元每个

分享几个内网穿透的免费/低价的工具

major与jodd NoClassDefFoundError错误问题

Unsupported major.minor version 52.0Exception in thread "main" java.lang.UnsupportedClassVersionError: jodd/http/HttpRequest : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method)上jar包jvm版本高于jdk编译器版本,替换成旧jar或者更换高版本jdkhttps://zhidao.baidu.com/question/757441798969760124.htmlNoClassDefFoundError - jodd / exception / UncheckedExceptionjodd-lagarto模块依赖于jodd-core缺少类的模块修改了jdk在环境变量中的路径怎么cmd中的jdk版本没有变把path路径下的jdk配置放在前面即可%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;

JSONObject某些常用方法

JSONObject response=new new JSONObject(); //括号内加true可以对内部进行排序response.clear();  //清除内容//将map转换成jsonobject,其中map为map类型:JSONObject records=new JSONObject(map);//JSON形式字符串转nutmapString result = testFeignRemote.queryResult(requestStr);map = new NutMap(result);  或者          map=JSON.parseObject(result ,NutMap.class); //map先转json串再转成json对象NutMap responseMap = changeResponse(map);String jsonString = JSON.toJSONString(responseMap);response = JSONObject.parseObject(jsonString);Map<String, Object> messageMap = JSON.parseObject(String.valueOf(message), Map.class);有不同的json解析包,但用法大同小异,注意其中方法的写法区别。例如:fastjson与sf.json,sf.json依赖时注意事项:<dependency>    <groupId>net.sf.json-lib</groupId>    <artifactId>json-lib</artifactId>    <version>2.4</version>    <classifier>jdk15</classifier></dependency>如果classifier不写的话可能会出错。intValue()方法可用来获取BigInt值的int值科普向:JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包。构造方法如下:JSONObject();创建一个空的JSONObject对象JSONObject(boolean isNull);创建一个是否为空的JSONObject对象普通方法如下:fromBean(Object bean);静态方法,通过一个pojo对象创建一个JSONObject对象fromJSONObject(JSONObject object);静态方法,通过另外一个JSONObject对象构造一个JSONObject对象fromJSONString(JSONString string);静态方法,通过一个JSONString创建一个JSONObject对象toString();把JSONObject对象转换为json格式的字符串iterator();返回一个Iterator对象来遍历元素接下来就是一些put/get方法,需要普通的get方法和pot方法做一下强调说明,API中是这样描述的:A get method returns a value if one can be found, and throws an exception if one cannot be found. An opt method returns a default value instead of throwing an exception, and so is useful for obtaining optional values. JSONArray:A JSONArray is an ordered sequence of values.是一个final类,继承了Object,实现了JSON接口构造方法如下:JSONArray();构造一个空的JSONArray对象普通方法如下:fromArray(Object[] array);静态方法,通过一个java数组创建一个JSONArray对象fromCollection(Collection collection);静态方法,通过collection集合对象创建一个JSONArray对象fromString(String string);静态方法,通过一个json格式的字符串构造一个JSONArray对象toString();把JSONArray对象转换为json格式的字符串iterator();返回一个Iterator对象来遍历元素接下来同样是put/get方法……XMLSerializer:Utility class for transforming JSON to XML an back.一个继承自Object的类构造方法如下:XMLSerializer();创建一个XMLSerializer对象普通方法如下:setRootName(String rootName);设置转换的xml的根元素名称setTypeHintsEnabled(boolean typeHintsEnabled);设置每个元素是否显示type属性write(JSON json);把json对象转换为xml,默认的字符编码是UTF-8,需要设置编码可以用write(JSON json, String encoding)

JSONObject某些常用方法

Windows/Linux根据端口结束进程与根据端口找到程序位置

根据端口结束进程:先查询出端口获得pid,随后结束pidwindows:netstat -ano|findstr 8081taskkill /f /pid 17048linux根据端口查询程序位置:netstat -antlp|grep 9002 根据端口查询获取pidcd /proc/12093 进入pidcwd->                           获取位置或者:pwdx 12093                      pwdx加进程号亦可

普通手机安装使用谷歌相机教程

谷歌相机下载地址(若没你的机型,可不管机型下载最新版,有一定几率可用,前提手机必须装有谷歌框架):https://www.celsoazevedo.com/files/android/google-camera/dev-bsg/适用用红米/小米的谷歌相机(转酷安):https://spoience.top/#/1/main/Redmi%20K30%20Pro/Gcam%E8%B0%B7%E6%AD%8C%E7%9B%B8%E6%9C%BA其近期文件蓝奏云下载:https://lanzoux.com/iDHOYepp2ja谷歌相机AR相关组件:https://www.celsoazevedo.com/files/android/google-camera/ar/可以在上述下载列表中找到适合自己手机型号的相机,需要安装谷歌框架,可以使用Go谷歌安装器来安装谷歌套件,否则可能会出现闪退。如果无法安装谷歌框架可以通过“OurPlay”(曾用名谷歌空间)这款App安装谷歌相机,打开速度肯定没原生快,但,凑合用吧。OurPlay地址:https://www.ourplay.net/使用它无非就是体验谷歌相机HDR+的强大算法威力,据说能对拍摄质量有很大提升。大家可以试试吧。    最新小米等主流手机谷歌相机安装包,请微博搜索“阿狗酱”进去,在其微博搜索机型即可,或直接访问微博地址:https://weibo.com/u/5213532617    遗憾的是该作者目前停止更新了,不过还可以在微博搜索旧版本。自用的小米8版本:GCam_7.2.010_Urnyx05 1.9Pro V2 DogJam r0m10.apk大小:75M已经过安全软件检测无毒,请您放心下载。

普通手机安装使用谷歌相机教程

deepine独显笔记本启动黑屏卡logo的解决办法

deepine独显笔记本启动黑屏卡logo的解决办法开机,在显示出引导选项菜单的时候按e进入引导文本编辑页面找到类似如下内容的一行linux        /boot/vmlinuz-4.9.0-deepin13-amd64 root=UUID=57d9aa6c-2452-4374-b4b8-bbd81a2975c2 ro splash quiet在 quiet 的后面空一格 加入 acpi_osi=! acpi="windows 2009"加好以后,按F10保存开机这样应该就可以进入系统了然后打开终端,依次输入:sudo susudo gedit /boot/grub/grub.cfg接着,在弹出的文本页面里(可使用ctrl+F搜索,不同编辑器快捷键不同),找到第一个quietlinux        /boot/vmlinuz-4.9.0-deepin13-amd64 root=UUID=57d9aa6c-2452-4374-b4b8-bbd81a2975c2 ro splash quiet同样的在 quiet 后面空一格,加入 acpi_osi=! acpi="windows 2009"保存,关闭接着,在终端里输入sudo gedit /etc/default/grub 在弹出的文本页面的末尾加入GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT "'acpi_osi=! acpi_osi="Windows 2009"'这样以后就可以正常开机了如果出现风扇狂转的情况那么就点开启动器-系统管理-驱动管理器在驱动管理器里把两项驱动都点选上安装好以后重启如果重启的时候又出现卡logo不能进入系统的情况那么就按照之前的办法再处理一次以后就不会有任何问题了deepin开机输入账号密码后鼠标一直转圈暂时性解决方案:开机后能加载桌面,但是重启失效解决方案:(1)开机后按esc,然后选中deepin系统,点击enter进入,默认选中第一个,如下图所示,然后这个时候千万不要点击enter,这个时候应该按键盘上的e,进入grub编辑页面;(2)然后我们在菜单中的代码中,找到倒数第二行,会出现如下所示的代码:linux /vmlinuz-4.15.0-29deepin-generic root=UUID=b66d8ffa-aed9-466c-bc12-6bb801e45901 ro splash quiet上面这行表示加载linux内核文件,解释如上面所示。(3)在quiet的后面空一格加上如下所示的代码:nouveau.modeset=0,然后按F10保存即可。这时会重新开始登录deepin系统,耐心等待进入桌面即可。永久性解决方案:重启正常,永久解决输入账号密码后不能加载桌面的问题解决方案:(1)开机后输入账号和密码,等待十几秒或者一分钟时间加载桌面,这个时候应该不会出现鼠标一直转圈圈的问题了(2)按Ctrl+Alt+T进入打开终端,输入以下代码来打开grub配置文件:sudo gedit /boot/grub/grub.cfg(3)输入密码成功后会打开你的grub.cfg文件,如图所示,然后按Ctrl+F搜索quiet,并在第一个quiet后面空一格加上这行代码:nouveau.modeset=0,并保存退出,重启即可。

SpringBoot用idea启动热部署失败解决方法

热部署即所见即所得,无需手动重启微服务。添加pom依赖即可<!--spring boot 热部署的依赖--> <dependency>  <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>如果出现热部署不能使用则有可能是IDEA默认设置问题,需要更改如下设置:人后shift+ctrl+alt+/,选择registy操作后保存即可

SpringBoot用idea启动热部署失败解决方法