public void test() throws Exception {//将图片存到数据库 File file = new File("D:\\pictureTest\\new.doc"); FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int len = -1; byte[] buf = new byte[1024]; while((len = fis.read(buf)) != -1) {//汇总字节流到内存 baos.write(buf, 0, len); } baos.close(); fis.close(); byte[] bytes = baos.toByteArray();//从内存取出字节流数组 Blob pic = conn.createBlob(); pic.setBytes(1, bytes);//把字节流设置给blob类 String sql = "insert into images(image) values (?)"; PreparedStatement ppst = conn.prepareStatement(sql); ppst.setBlob(1, pic); ppst.execute(); ppst.close(); }
时间: 2024-02-15 13:27:32 浏览: 91
这段代码使用Java中的IO操作将一个文件存储到数据库中。具体实现步骤如下:
1. 创建一个文件输入流FileInputStream,用于读取指定文件D:\\pictureTest\\new.doc中的数据。
2. 创建一个ByteArrayOutputStream,用于将读取到的数据以字节数组的形式写入内存缓冲区中,并支持动态扩容。
3. 创建一个缓冲区byte[],用于存储每次读取到的数据。
4. 循环读取文件输入流中的数据,将每次读取到的数据写入ByteArrayOutputStream中。
5. 关闭文件输入流和ByteArrayOutputStream,释放资源。
6. 从ByteArrayOutputStream中获取字节数组byte[],用于存储到数据库中。
7. 创建一个Blob对象,用于存储字节数组。
8. 将字节数组设置给Blob对象。
9. 创建一个PreparedStatement对象,用于执行SQL语句。
10. 将Blob对象设置给PreparedStatement对象中的占位符。
11. 执行SQL语句。
12. 关闭PreparedStatement对象,释放资源。
需要注意的是,这段代码中使用了文件输入流和ByteArrayOutputStream,需要及时关闭这两个流并释放资源,避免内存泄漏。同时,如果存储的文件较大,可能会导致内存溢出问题,需要特别注意。
相关问题
分析以下代码缺少什么依赖,以及有什么需要改正的: public static void main(String[] args) throws Exception { // 要截图的html字符串 String html = "<html><body><h1>Hello World!</h1><p>This is a test.</p></body></html>"; // 将html字符串保存为一个html文件 File htmlFile = new File("test.html"); FileUtils.writeStringToFile(htmlFile, html, "UTF-8"); // 加载网页并渲染为BufferedImage Java2DRenderer renderer = new Java2DRenderer(htmlFile.toURI().toURL()); BufferedImage image = renderer.getImage(); // 保存为图片文件 ImageIO.write(image, "png", new File("screenshot.png")); // 删除临时文件 FileUtils.deleteQuietly(htmlFile); }
这段代码缺少以下依赖:
1. Apache Commons IO:用于文件的读写操作。
2. Flying Saucer:用于 HTML 渲染为 BufferedImage。
需要改正的地方:
1. 需要引入缺少的依赖。
2. 在使用 Flying Saucer 进行 HTML 渲染时,需要指定渲染的目标设备,例如屏幕、打印机等,可以通过 `render.setDeviceXXX()` 方法进行设置。
3. 在渲染完成后,需要手动关闭资源,例如调用 `renderer.close()` 方法,以释放资源。完整的代码如下:
```
public static void main(String[] args) throws Exception {
// 要截图的html字符串
String html = "<html><body><h1>Hello World!</h1><p>This is a test.</p></body></html>";
// 将html字符串保存为一个html文件
File htmlFile = new File("test.html");
FileUtils.writeStringToFile(htmlFile, html, "UTF-8");
// 加载网页并渲染为BufferedImage
Java2DRenderer renderer = new Java2DRenderer(htmlFile.toURI().toURL());
renderer.setDevice("screen"); // 指定渲染设备
BufferedImage image = renderer.getImage();
// 保存为图片文件
ImageIO.write(image, "png", new File("screenshot.png"));
// 关闭资源
renderer.close();
FileUtils.deleteQuietly(htmlFile);
}
```
import java.io.File; import java.util.InputMismatchException; import java.util.Scanner; import java.io.PrintWriter; public class Main { public static void main(String[] args)throws InputMismatchException { try {String str; File test = new File("e://test.txt"); System.out.println(test.exists()); Scanner input = new Scanner("e//test.txt"); int l=0; int c=0; int w=0; while ((str=input.nextLine())!=null) { l++; c+=str.length(); } while((str=input.next())!=null){ w++; } System.out.println("文件字符个数为:"+c); System.out.println("文件行数为:"+l); System.out.println("文件单词个数为:"+w); } catch (InputMismatchException exception){ System.out.println("InputMismatchException"); } } }哪里错误
这段代码可能存在以下错误:
1. 在使用 Scanner 类读取文件时,应该传入文件对象而不是文件路径字符串。代码中使用的是 "e//test.txt" 字符串,应该改为 new File("e://test.txt")。
2. 在使用 Scanner 类读取文件时,应该使用 hasNextLine() 和 hasNext() 方法来检查是否还有下一行和下一个单词可读取。代码中使用的是 while 循环来读取文件,这会导致程序进入死循环。
3. 在统计单词个数时,应该使用正则表达式来判断单词的边界,例如 "\\b\\w+\\b" 可以匹配一个或多个字母组成的单词。代码中使用的是 input.next(),这只能读取一个单词,无法正确地统计单词个数。
修正后的代码可能类似于下面这样:
```java
import java.io.File;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
File file = new File("e://test.txt");
System.out.println(file.exists());
Scanner input = new Scanner(file);
int lines = 0;
int chars = 0;
int words = 0;
while (input.hasNextLine()) {
String line = input.nextLine();
lines++;
chars += line.length();
words += line.split("\\b\\w+\\b").length;
}
System.out.println("文件字符个数为:" + chars);
System.out.println("文件行数为:" + lines);
System.out.println("文件单词个数为:" + words);
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
阅读全文