最近在做图片读写,从服务器上读一张图片,存到手机的SD卡上。一开始是用的FileInputStream和FileOutputStream,但很多时候图片都损坏了,我也不明白是什么原因。有人建议我用ImageReader一系列的东西,我就尝试了一下。但是报出了这么一个错误:java.lang.NoClassDefFoundError:javax.imageio.ImageIO
我看了一下ImageIO在JRE System library中,我用的是jdk1.6.0_10。从网上搜了一下错误,说是包重复,我这也没发现重复现象。所以请各位高手半个帮,我做开发时间不长,还请多多帮助。另外,存取图片,怎样解决图片失真,损坏问题呢?
代码1:获取服务器连接
public InputStream getInputStream(String serverpath) throws Exception{ InputStream in=null; URL url = new URL(serverpath); httpurlconnection = (HttpURLConnection) url .openConnection(); httpurlconnection.setRequestMethod("POST"); httpurlconnection.setRequestProperty("Content-Type", "text/html"); httpurlconnection.setConnectTimeout(1000); httpurlconnection.setDoOutput(true); httpurlconnection.setDoInput(true); httpurlconnection.setUseCaches(false); httpurlconnection.connect(); System.out.println(123); in=url.openStream(); System.out.println(456); return in; }
代码2:存取图片
public void savepic(List<String> list,String packagename) throws Exception{ String filename=""; String url=""; for(int i=0;i<list.size();i++){ /* * ---第一张图片:图标 xxx0.png * ---第二张图片:大图1 xxx1.png * ---第三张图片:大图2 xxx2.png * ---第四张图片:star全 xxx3.png * ---第五张图片:star半 xxx4.png */ filename=list.get(i); System.out.println(filename.split("\\.")[0]); url="http://www.gyswad.com:90/push/"+filename; InputStream inputStream=getInputStream(url); FileOutputStream output = null; // ByteArrayOutputStream out=null; try { // 存储到SD卡 File sdFile = new File(sdcard_path + "/"+packagename+"/"+ filename.split("\\.")[0]+".gif"); File f1 = new File(sdcard_path); File f2=new File(sdcard_path+"/"+packagename); if (!f1.exists()) { f1.mkdir();// 创建文件夹 } if(!f2.exists()){ f2.mkdir(); } if (!sdFile.exists()) { sdFile.createNewFile();// 创建文件 // 写入文件 Iterator<ImageReader> readers=ImageIO.getImageReadersByFormatName("gif"); ImageReader reader=readers.next(); ImageInputStream iis=ImageIO.createImageInputStream(inputStream); reader.setInput(iis,true); BufferedImage bi=reader.read(0); Iterator<ImageWriter> writers=ImageIO.getImageWritersByFormatName("gif"); ImageWriter writer=writers.next(); ImageOutputStream ios=ImageIO.createImageOutputStream(sdFile); writer.setOutput(ios); writer.write(bi); //之前是用的这种方式 // output = new FileOutputStream(sdFile); // byte buffer[] = new byte[inputStream.available()]; // while (inputStream.read(buffer,0,buffer.length) != -1) { // output.write(buffer); // } // iis.close(); // ios.close(); } // if(output!=null){ // output.flush(); // } } catch (Exception e) { e.printStackTrace(); System.out.println("savepic Exception:"+e); } finally { if(inputStream!=null){ inputStream.close(); } if(output!=null){ output.close(); } if(httpurlconnection!=null){ httpurlconnection.disconnect(); } } } }
相关推荐
让我们深入探讨如何在不同的编程语言中使用文件路径来存取图片。 首先,理解文件路径的概念至关重要。文件路径是操作系统中找到特定文件的指南,它包含了文件所在的目录结构。例如,"C:\Users\John\Pictures\Sunset...
通过这四个来源,我们可以存取应用程序的图片。 * 相册:iPhone 的相册包含摄像头胶卷和用户计算机同步的部分照片。用户可以通过 UIImagePickerController 类提供的交互对话框来从相册中选择图像。 * 应用程序包:...
- 对于图片,可以使用图片处理库(如Java的ImageIO或第三方库)来验证图片格式,避免安全漏洞。 6. **性能优化**: - 使用文件存储服务,如Amazon S3或阿里云OSS,减轻服务器存储压力。 - 使用CDN服务缓存和分发...
为了高效地处理图片,我们可能还需要了解图像处理库,如Java的`ImageIO`或Android的`BitmapFactory`,它们可以帮助我们解码图片文件,以便在内存中进行操作。 在读取文件时,需要注意文件路径的正确性,以及处理...
3. **图片处理**:可能涉及Java的图像I/O库(如javax.imageio),包括读取、写入、转换和操作图像。 4. **Web开发**:HTTP协议、MVC(Model-View-Controller)设计模式、Servlet与JSP的关系、会话管理等。 5. **...
HashSet和HashMap实现了Set和Map接口,提供快速的存取操作。理解并合理使用这些数据结构能优化代码性能和内存占用。 5. **异常处理**: Java使用异常处理机制来捕获和处理程序运行时的错误。异常是通过`try-catch-...
- 使用ImageIO类保存截取的图片到本地。 3. **扫雷游戏实现**: - 目标:开发一款与Windows扫雷游戏相似的程序,包含初级、中级和高级游戏模式。 - 技术实现: - 自定义JButton类,创建专属的按钮类。 - 应用...
数据库设计包括用户表、相册表、图片表等,确保数据的高效存取。 4. **文件上传与存储**:用户上传的图片需要被妥善存储。系统可能使用本地文件系统或者云存储服务(如Amazon S3或Google Cloud Storage)。同时,...
3. **数据库集成**:Java JDBC(Java Database Connectivity)是连接数据库的标准API,可以用于存取影像的元数据,如文件名、大小、上传时间等。而ORM框架如Hibernate或MyBatis可以帮助开发者更高效地操作数据库。 ...