java 二进制流转码_Java登不上SQL编辑器,IO流,转换流字节转字符,swing,二进制JDBC,保存图片诗书画唱...

本文介绍了在Java中如何处理SQL编辑器无法连接的问题,并提供了使用二进制流保存和读取图片的场景。通过案例展示了如何进行文件读写,包括将用户输入保存到UTF-8格式的文件,读取不同编码格式的文件内容,以及将GBK文件内容转换为UTF-8格式。同时,文章涵盖了转换流在读写过程中的应用,确保字符编码的正确性。
摘要由CSDN通过智能技术生成

当登不上SQL编辑器的时候,可能是自己写的服务器名称不存在,所有就去把服务器名称改为“.",可代表所有的所有的服务器名称。

SQL编辑器中储存图片的二进制的形式要用“image”的数据类型,而不是字符串(长度最大为8000)的类型,因为可能会存不下(亲身经历的总结)。6971f6d7e29f0c3d4779b8bd0cb3fba9.png

案例1:在项目根目录新建一个txt文件,提示用户输入内容,知道输入“no”后结束输入,将其保存到该文件中,要求保存的格式为utf-8(文件本身的格式不可改变,但是保存到文本内容用转换流保存为自己要保存的格式)

342a1d149d6612c7830db35cf4ec5a97.png

//案例1:在项目根目录新建一个txt文件,

//提示用户输入内容,知道输入“no”后结束输入,

//将其保存到该文件中,要求保存的格式为utf-8

package zhuanHuaLiu;

import java.io.*;

import java.util.*;

public class shuRu {

public static void main(String[] args) throws Exception {

File newWenJian=new File("src//new.txt");

if(newWenJian.exists()){

newWenJian.delete();

newWenJian.createNewFile();

}else{

newWenJian.createNewFile();

}

while(true){

System.out.println("请输入内容(输入“no”后结束输入)");

Scanner shuRu=new Scanner(System.in);

String jieShouHang=shuRu.nextLine();

if(!jieShouHang.equals("no")){

InputStreamReader shuRuLiu=new InputStreamReader

(new FileInputStream(newWenJian),"UTF-8");

//FileOutputStream outputStream = new FileOutputStream(newWenJian);

//OutputStreamWriter outputWriter=

//new OutputStreamWriter(outputStream,"utf-8");

FileWriter xieRu=new FileWriter(newWenJian , true);

xieRu.write(jieShouHang);

xieRu. flush();

xieRu. close();

System.out.println("追加成功!");

//BufferedWriter shuRuLiu=

//new BufferedWriter(new FileWriter(newWenJian));

//shuRuLiu.write(jieShouHang);

//shuRuLiu.flush();

//shuRuLiu.close();

System.out.println("输入的内容已经写入到new.txt中");

}

else{

System.out.println("输入的内容为no!结束输入!");

System.exit(0);

}

}

}

}

1ad487c47c53ed8b11222278b7f86250.png

d4b34a98a68ceaaf85ddf089edec00d6.png

案例2:读取保存的文件的信息,要求读取的格式分别为gbk,utf-8

ec8690a3c5b0bc57b4dbd70a47dd5ec7.png

package zhuanHuaLiu;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

/*

FileReader可以读取IDE默认编码格式(UTF-8)的文件

FileReader读取系统默认编码(中文GBK)会产生乱码

*/

public class baoLiu {

public static void main(String[] args) throws IOException {

System.out.println("从UTF-8.txt读取的内容:");

duQu("UTF-8.txt","UTF-8");

System.out.println("\n\n从GBK.txt读取的内容:");

duQu("GBK.txt","GBK");

}

private static void duQu(String luJing,String bianMaGeShi)

throws FileNotFoundException, IOException {

//FileReader fr = new FileReader(luJing);

InputStreamReader jieMa =

new InputStreamReader(new FileInputStream(luJing),bianMaGeShi);

//:InputStreamReader YYY =

//new InputStreamReader(new FileInputStream(ZZZ),XXX);

//:表示可以读取中文不乱码的编码格式为"XXX"

//OutputStreamWriter bianMa =

//new OutputStreamWriter

//(new FileOutputStream(luJing),"UTF-8");

int len = 0;

while((len = jieMa.read())!=-1){

System.out.print((char)len);

}

jieMa.close();

}

}

4ec4cace30e739a4b896a9c6d3276e2d.png

82e9d6e083447fb0251e8aade4176cae.png

0fec7b8f130f58ea183d6f377edd314b.png

3706451e7b557b1ef44eec8dc010a1bb.png

8af4c408620f0b47520400e66e304e35.png

db048be11702e03c8f229dd599c75dd2.png

扩展:

获取编码格式:

d2c0a53c860765dd58f985d276677c21.png

案例3:使用转换流读取一张文本信息,要求读取的格式为UTF-8,将内容保存到数据库d7151f7ff9e3fefd6199311e7667aa50.png

create table wenBen(

wenBenId int primary key identity(1, 1),

wenBenNeiRong nvarchar(100) not null

)

select * from wenBen

eb77da8dc5bc28ba8432d8bb904acb9a.png

285d52d6b751fac278c98295ed2cfbab.png

package zhuanHuaLiu;

import java.io.*;

import java.sql.*;

import java.util.*;

public class zhuanHuan {

public static void main(String[] args) throws Exception{

//Just do it!你好!请给我(诗书画唱)三连和关注!

File f=new File("aa.txt");

InputStreamReader shuRuLiu=new InputStreamReader

(new FileInputStream(f),"UTF-8");

//:这样会中文乱码

//InputStreamReader isr=new InputStreamReader

//(new FileInputStream(f));这样就不会中文乱码

BufferedReader huanChongLiu=new BufferedReader(shuRuLiu);

String ziFuChuan="";

ArrayList jiHe=new ArrayList();

while((ziFuChuan=huanChongLiu.readLine())!=null){

jiHe.add(ziFuChuan);

}

shuRuLiu.close();

Connection con=DBUtilsPreparedStatement.getCon();

for(String i:jiHe){

DBUtilsPreparedStatement.ZSG("insert into wenBen values(?)",con,i);

}

}

}

78fc7eef4c483c66b0581d39c923c9ac.png

ab408bc1a566e19d62c56b5e483525e8.png

package zhuanHuaLiu;

import java.io.InputStream;

import java.sql.*;

import java.util.Properties;

class DBUtilsPreparedStatement{

static String url,root,uname,pwd=null;

static PreparedStatement ps=null;

static Connection con=null;

static ResultSet res=null;

static{

InputStream is=DBUtilsPreparedStatement.class.

getResourceAsStream("./database.properties");

Properties p=new Properties();

try {

p.load(is);

url=p.getProperty("url");

root=p.getProperty("root");

uname=p.getProperty("uname");

pwd=p.getProperty("pwd");

Class.forName(root);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static Connection getCon(){

if(con==null){

try {

con=DriverManager.getConnection(url,uname,pwd);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return con;

}

public static ResultSet Select(String sql,Connection con1,Object... o){

con=con1;

System.out.println(sql);

try {

ps=con.prepareStatement(sql);

for(int i=0;i

ps.setObject(i+1,o[i]);

}

res=ps.executeQuery();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return res;

}

public static boolean ZSG(String sql,Connection con1,Object... o){

con=con1;

boolean b=false;

try {

ps=con.prepareStatement(sql);

for(int i=0;i

ps.setObject(i+1,o[i]);

}

int num=ps.executeUpdate();

if(num>0){

b=true;

}

} catch (Exception e) {

e.printStackTrace();

}

return b;

}

}

238b5f4600fea5b052032fe4149c25d1.png

7f37d48a58e0abec725bf0ff07d561d3.png

url=jdbc:sqlserver://localhost;databaseName=yonghu

uname=qqq

pwd=123

root=com.microsoft.sqlserver.jdbc.SQLServerDriveraedee65dda2569349ee220a116f8a15b.png

247a23775241bd4a6d81140d70c56d18.png

91d7b4ff9520ff4497933e282d15277a.png

案例4:使用数据库保存一张图片,并将其读取出来,数据库图片列设置为image,使用字节流或者字节缓冲流来做f74a19703bda696ada313a606de86cc4.png

create table img(

imgId int primary key identity(1, 1),

img image not null

)

--drop table img

select * from img

bb622a74a1a9f240402469ca0b714b94.png

f532c6d99258a29455caa136bc7eb9e2.png

package zhuanHuaLiu;

import java.io.*;

import java.sql.*;

public class imgBaoCun {

public static void main(String[] args) throws Exception {

File img=new File("7.jpg");

//FileInputStream:字节输入流

//由in联想到输入进入里面。由out联想到输处出去到外面。

//FileOutputStream:字节输出流

FileInputStream ziJieShuRuLiu=new FileInputStream(img);

byte[] ziJieShuZu=new byte[(int)img.length()];

//:这里把图片转换为二进制

ziJieShuRuLiu.read(ziJieShuZu);

//:用read读一次就将ziJieShuRuLiu图片

//用ziJieShuZu的形式格式全部读完了

Connection con=DBUtilsPreparedStatement.getCon();

DBUtilsPreparedStatement.

ZSG("insert into img values (?)", con, ziJieShuZu);

System.out.println("内容存储成功");

}

}

b06c4711b0ecc2c45a6713579e6e4b61.png

5d115a869ec38e62160c18de236c1a5a.png

package zhuanHuaLiu;

import java.io.InputStream;

import java.sql.*;

import java.util.Properties;

class DBUtilsPreparedStatement{

static String url,root,uname,pwd=null;

static PreparedStatement ps=null;

static Connection con=null;

static ResultSet res=null;

static{

InputStream is=DBUtilsPreparedStatement.class.

getResourceAsStream("./database.properties");

Properties p=new Properties();

try {

p.load(is);

url=p.getProperty("url");

root=p.getProperty("root");

uname=p.getProperty("uname");

pwd=p.getProperty("pwd");

Class.forName(root);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static Connection getCon(){

if(con==null){

try {

con=DriverManager.getConnection(url,uname,pwd);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return con;

}

public static ResultSet Select(String sql,Connection con1,Object... o){

con=con1;

//System.out.println(sql);

try {

ps=con.prepareStatement(sql);

for(int i=0;i

ps.setObject(i+1,o[i]);

}

res=ps.executeQuery();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return res;

}

public static boolean ZSG(String sql,Connection con1,Object... o){

con=con1;

boolean b=false;

try {

ps=con.prepareStatement(sql);

for(int i=0;i

ps.setObject(i+1,o[i]);

}

int num=ps.executeUpdate();

if(num>0){

b=true;

}

} catch (Exception e) {

e.printStackTrace();

}

return b;

}

}

d67cd4019573300f90492a049dd3ef91.png

0800e5b3cbc85a8769f903b1358624f8.png

url=jdbc:sqlserver://localhost;databaseName=yonghu

uname=qqq

pwd=123

root=com.microsoft.sqlserver.jdbc.SQLServerDriver

bb44072ca992344ade3781c15e739085.png

b3845523da5eb9f946cbcdf2713206ff.png

145780418dedb2dc1bf47c3b57e6fe15.png

案例5.使用swing新建一个注册界面,点击提交将用户信息提交到文件中,在用户登录的时候去文件中读取信息,判断用户是否可以进行正常登录

daafc7ea042cf4240c876efc319fdd66.png

package zhuanHuaLiu;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.*;

import java.sql.*;

import javax.swing.*;

public class swing  extends JFrame{

public static JTextField unameKuang,pwdKuang;

public static JLabel unameWenZi, pwdWenZi = null;

public static JButton dengLuAnNiu,zhuCeAnNiu;

public static void main(String[] args) throws Exception{

new swing();

}

public swing(){

this.setLayout(null);

this.setSize(400,400);

this.setLocationRelativeTo(null);

unameKuang=new JTextField();

pwdKuang=new JTextField();

dengLuAnNiu=new JButton("登录");

zhuCeAnNiu=new JButton("注册");

unameWenZi=new JLabel("用户名");

pwdWenZi=new JLabel("密码");

unameKuang.setBounds(130,100,130,30);

pwdKuang.setBounds(130,140,130,30);

unameWenZi.setBounds(80,100,130,30);

pwdWenZi.setBounds(80,140,130,30);

dengLuAnNiu.setBounds(130,180,70,30);

zhuCeAnNiu.setBounds(220,180,70,30);

dengLuAnNiu.addActionListener(new shiJian());

zhuCeAnNiu.addActionListener(new shiJian());

this.add(unameWenZi);this.add(pwdWenZi);

this.add(unameKuang);this.add(pwdKuang);

this.add(dengLuAnNiu);this.add(zhuCeAnNiu);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

}

class shiJian implements ActionListener{

@Override

public void actionPerformed(ActionEvent e) {

try {

String neiRong=e.getActionCommand();

if(neiRong.equals("登录")){

//用.getText().trim();

//(去除其中空格后)得到用户输入的用户名和密码

String uname=swing.unameKuang.getText().trim();

String pwd=swing.pwdKuang.getText().trim();

System.out.println("用户名:"+uname+"  :   密码:"+pwd);

//让用户输入的内容和文件中的内容相比较,

//如果都相等的时候就可以登录,否则不能登录。

//读取文件:

File wenJian=new File("aa.txt");

FileReader duQu=new FileReader(wenJian);

char[] charShuZu=new char[100];

int len;

//因为每次读的内容都是一个字符数据,所以

//将读取的所有内容拼接为一个StringBuffer:

StringBuffer ziFuChuanHuanChing=new StringBuffer();

//String和StringBuffer他们都可以存储和操作字符串,

//即包含多个字符的字符串数据。

//String类是字符串常量,是不可更改的常量。

//而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

while((len=duQu.read(charShuZu))!=-1){

ziFuChuanHuanChing.append(new String(charShuZu,0,len));

}

duQu.close();

String[] StringShuZu=

ziFuChuanHuanChing.toString().split("\\|");//转义符号

//(1)split表达式,其实就是一个正则表达式。

//*  ^ | 等符号在正则表达式中属于一种有特殊含义的字符,

//如果使用此种字符作为分隔符,必须使用转义符即\\加以转义。

//    (2)如果使用多个分隔符则需要借助 | 符号,如二所示,

//但需要转义符的仍然要加上分隔符进行处理

//

//

//

//所有的ASCII码都可以用“\”加数字(一般是8进制数字)

//来表示。而C中定义了一些字母前加

//"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,"

//+ "就称为转义字符,因为后面的字符,"

//+ "都不是它本来的ASCII字符意思了。

for(String i:StringShuZu){

String[] douHao=i.split(",");

if(douHao.length!=2){

//JOptionPane.showMessageDialog(null,"登录失败");

continue;

}

if(douHao[0].equals(uname)&&douHao[1].equals(pwd)){

JOptionPane.showMessageDialog(null,"登录成功");

return;

}

}

JOptionPane.showMessageDialog(null,"登录失败,"

+ "可能是没注册,或密码等填写有误,先注册! ");

}else if(neiRong.equals("注册")){

//找到这个文件:

File weJian=new File("aa.txt");

//得到用户输入的用户名和密码

String uname=swing.unameKuang.getText().trim();

String pwd=swing.pwdKuang.getText().trim();

FileWriter zhuiJiaXieRu=new FileWriter(weJian,true);

//字符串拼接qqq   www

//难题:就是取内容的时候,怎么区分开我保存的内容:用split

String neirong=uname+","+pwd+"|";

zhuiJiaXieRu.write(neirong);

zhuiJiaXieRu.close();

}

} catch (Exception e2) {

e2.printStackTrace();

}

}

}

a6e9ff455e935d75cb5c4669361ea0e6.png

ecdc54e7fd16d89d9edcf0adebed3447.png

cd10ff00a4dd6c367fcfb704cdda5ec0.png

b7f5bea9e927bc87bdda307cedf45e60.png

a53cf050dc7a571c46d8c0e9df24e4e1.png

04d37a6ae0c8a01c1437d24f6e9f5375.png

将字节转为字符:5c1f00a5b955342ba2f14b9874f19f09.png

package zhuanHuaLiu;

import java.io.*;

public class ziJieZiFu {

public static void main(String[] args) throws Exception{

//转换流:

//将字节转为字符。is为InputStream的缩写

InputStream shuRu=System. in;

//如果想让标准输入接收为字符,就用转换流:

//isr为InputStreamReader的缩写

InputStreamReader duQi=new InputStreamReader(shuRu);

char[] shuZu=new char [100] ;

//cs为“chars”的缩写,代表有很多个char,为字符数组

//changDu:长度

int changDu=duQi. read(shuZu);

//len为length的缩写

System. out . println(new String(shuZu ,0,changDu));

}

}

3ad49fc965d17abb3bf55d65c5cc2a14.png

5d8c8eea6bc1d96f33642b9e574674e0.png

65849ae32696b1aac2dd80781abea523.png

读取一个相对路径的有中文的txt文件,用转码器,输入流读取内容输入到转码码器,用循环语句,字符数组输出内容,要求不出现乱码:

d2bd92049fa89b4d108b1c8a9195adf9.png

5f46ed7d304f61676328444b7df59a5e.png

9f629c37b1582c5270dd4a0c23e0b93f.png

package zhuanHuaLiu;

import java.io.*;

public class Chinese {

public static void main(String[] args) throws Exception{

File f=new File("aa.txt");

//input

//

//输入常用释义

//英 [ˈɪnpʊt]美 [ˈɪnˌpᴜt]

//n.

//放入物;带入物;被操作物;输入端;输入装置;输入;能量输入;电信号;捐献;投入

//v.

//输入

InputStreamReader zhuanMaQi=new InputStreamReader

(new FileInputStream(f) , "gb2312");

//zhuanMaQi:转码器

//InputStreamReader就是一种转码器

//gb2312:为某种编码格式

char[] shuZu=new char[100] ;

int changDu;

while( (changDu=zhuanMaQi.read(shuZu))!=-1){

System. out . println(new String(shuZu, 0,changDu));

}

zhuanMaQi. close();

}

}

2ddaad57da94c3509cca44a5badb34a7.png

193af8d98817aee19aac2dcf9e62cc56.png

e51431ff0f7818cc6c955b7cc198e488.png

请编写代码把一个GBK的文本文件内容读取后存储到

一个UTF-8的文本文件中。(不论平台是什么字符编码)

aa05e8a311d439a17587cfca3a902ced.png

4f67941cdce21dcd128e05aa75272306.png

b8e2c888104a25212840fd3a7cb40c60.png

070b00898422b8a359f8d11ce7e3185e.png

4c6f90087ee453cffa233f605c090bfe.png

e5defa44a533bae7cfa9f0e319e4e2c1.png

b8e8e8bb801c042c99e053deed6f6879.png

package zhuanHuaLiu;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

public class baoLiu {

public static void main(String[] args) throws IOException {

String src = "GBK.txt";//GBK的文本文件

String dest = "UTF-8.txt";//UTF-8的文本文件

//不清楚当前平台的字符编码时,

//读取就只能选择字节输入流 ( FileInputStream)

//和使用 InputStreamReader(进行解码,解析出格式),

//就像把"塑料融化",之后方便"变成",设置成别的格式,"形状",

//之后输出时才可以设置别的格式。

InputStreamReader jieMa =

new InputStreamReader(new FileInputStream(src),"GBK");

//输出时只能选择  FileOutputStream (字节输出流)

//和用OutputStreamWriter(进行编码,设置编码格式)

OutputStreamWriter bianMa =

new OutputStreamWriter(new FileOutputStream(dest),"UTF-8");

//一边读一边写:

//从jieMa中读取,已经解码后的数据,是字符流。

//从bianMa写出时,先写字符流,然后bianMa按照指定的编码方式,

//再写到FileOutputStream流中,再写到文件中

char[] charShuZu = new char[1024];

int len;

while((len = jieMa.read(charShuZu)) != -1){

bianMa.write(charShuZu, 0, len);

}

//关闭解码和编码部分:

bianMa.close();

jieMa.close();

}

}

21e0712673110184e29c93acbd3891c1.png

执行代码后:

41216de17d88c3527a09ae239050db53.png

注释:

【char[] charShuZu = new char[1024];

int len;

while((len = jieMa.read(charShuZu)) != -1){

//len = jieMa.read(charShuZu):逐个解码

bianMa.write(charShuZu, 0, len);

//bianMa.write(charShuZu, 0, len):进行编码

}

6663b8bd51359f4dfe20cb42a41273a3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值