当前位置: 代码迷 >> J2SE >> 运行一个生成验证码的Java程序,出现了文件拒绝访问的异常
  详细解决方案

运行一个生成验证码的Java程序,出现了文件拒绝访问的异常

热度:323   发布时间:2016-04-24 00:20:53.0
运行一个生成验证码的Java程序,出现了文件拒绝访问的错误。
代码如下:求高手解决
package ceshi;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;//Eclipse默认把这些受访问限制的API设成了ERROR。只要把windows->
  //Preferences->java-complicer->Errors/warning里面的Deprecated and restricted中的
  //forbidden references选为warning即可


public class YanZhengMa {
int Weight=100;//图片宽
int Height=200;//图片高
BufferedImage image=new BufferedImage(Weight,Height,BufferedImage.TYPE_INT_RGB);//weight,height是int类型的图片长宽变量
static String[] c={"a","b","c","d","e","f"};
public static void main(String[] args) {
  YanZhengMa t=new YanZhengMa();
  String path="D:";
  t.drawPicture();
  t.createJpg(path);
}
//获取制定长度的字符串,三个参数分别代表,单个字符串数组作为验证码获取的字符串,字符串数组的长度,定义获得字符串长度
  public String getRandomStr(String[] regter,int leg,int strln){
Random intRandom=new Random();
StringBuffer str=new StringBuffer();
for(int i=0;i<strln;i++){
str.append(String.valueOf(regter[intRandom.nextInt(leg)]));  
}
return str.toString();
  }
  //把字符串画在jpg格式的文件上
  public void drawPicture(){
Graphics g=image.getGraphics();
Graphics2D pen = (Graphics2D) g;// 平面图像,pen为画笔
pen.setColor(Color.white);
pen.fillRect(0, 0, Weight, Height);
pen.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
String str=getRandomStr(c,6, 5);
pen.drawString(str,100,100);
  }
  //生成jpg格式的图片
  public void createJpg(String path){
try {
FileOutputStream fos=new FileOutputStream(path);
BufferedOutputStream bos=new BufferedOutputStream(fos);
JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(bos);
encoder.encode(image);
fos.close();
bos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ImageFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
  }
}


------解决方案--------------------
你给的path不对啊,只说“D:”文件名呢?
------解决方案--------------------
给你一个我写的,参考一下:

package web;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class CheckCodeServlet extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("service...");
response.setContentType("image/jpeg");
BufferedImage image = new BufferedImage(60, 20,
  相关解决方案