轉換文件成為二進制數據並保存的Java代碼:
取出數據並還原文件到本地的java代碼:
[java]view plain//讀取資料庫二進制文件
publicvoidreaderJpg()throwsSQLException
{
connection=connectionManager.getconn();//自己連接自己的資料庫
StringsqlString="selectimagesfromsave_imagewhereid=4";//從資料庫中讀出要還原文件的二進制碼,這里我讀的是自己的資料庫id為4的文件
Filefile=newFile("E:\1.jpg");//本地生成的文件
if(!file.exists())
{
try{
file.createNewFile();
}catch(Exceptione){
e.printStackTrace();
}
}
try{
byte[]Buffer=newbyte[4096*5];
statement=connection.prepareStatement(sqlString);
resultSet=statement.executeQuery();
if(resultSet.next())
{
FileOutputStreamoutputStream=newFileOutputStream(file);
InputStreamiStream=resultSet.getBinaryStream("images");//去欄位用getBinaryStream()
intsize=0;
while((size=iStream.read(Buffer))!=-1)
{
System.out.println(size);
outputStream.write(Buffer,0,size);
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
② java中文件上傳 new File(文件路徑)問題
通過 」new FileInputStream(文件路徑)「的形式進行上傳即可。舉例:
/**
* 加密文件
*
* @param fileName
* @param date
* @param plainFilePath 明文文件路徑路徑
* @param filepath
* @return
* @throws Exception
*/
public static String encodeAESFileUploadByFtp(String plainFilePath, String fileName, String date,String filepath) throws Exception {
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
FTPClient ftpClient = new FTPClient();
String bl = "false";
try {
fis = new FileInputStream(plainFilePath);
bos = new ByteArrayOutputStream(fis.available());
byte[] buffer = new byte[1024];
int count = 0;
while ((count = fis.read(buffer)) != -1) {
bos.write(buffer, 0, count);
}
bos.flush();
Log.info("加密上傳文件開始");
byte[] bytes = encodeAES(key, bos.toByteArray());
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
Log.info("連接遠程上傳伺服器"+CMBCUtil.CMBCHOSTNAME+":"+2021);
ftpClient.connect(CMBCUtil.CMBCHOSTNAME, 2021);
ftpClient.login(CMBCUtil.CMBCLOGINNAME, CMBCUtil.CMBCLOGINPASSWORD);
// Log.info("連接遠程上傳伺服器"+"192.168.54.106:"+2021);
// ftpClient.connect("192.168.54.106", 2021);
// ftpClient.login("hkrt-CMBCHK", "3OLJheziiKnkVcu7Sigz");
FTPFile[] fs;
fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(filepath)) {
bl="true";
ftpClient.changeWorkingDirectory("/"+filepath+"");
ftpClient.makeDirectory(date);
ftpClient.changeWorkingDirectory("/"+filepath+"/" + date);
}
}
Log.info("檢查文件路徑是否存在:/"+filepath);
if("false".equals(bl)){
ViewUtil.dataSEErrorPerformedCommon( "查詢文件路徑不存在:"+"/"+filepath);
return bl;
}
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
// 設置文件類型(二進制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile(fileName, is);
Log.info("加密上傳文件成功:"+fileName+"。文件保存路徑:"+"/"+filepath+"/" + date);
return bl;
} catch (Exception e) {
throw e;
} finally {
if (fis != null) {
try {
fis.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
if (bos != null) {
try {
bos.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
}
}
③ java中如何把一個文件轉化為byte數組
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
getBytesFromFile(new File("C:\\aaa.txt"));
}catch(IOException e){
System.out.println("IOException");
}
}
// 返回一個byte數組
public static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
// 獲取文件大小
long length = file.length();
if (length > Integer.MAX_VALUE) {
// 文件太大,無法讀取
throw new IOException("File is to large "+file.getName());
}
// 創建一個數據來保存文件數據
byte[] bytes = new byte[(int)length];
// 讀取數據到byte數組中
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
// 確保所有數據均被讀取
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
}
// Close the input stream and return bytes
is.close();
return bytes;
}
}
④ Java批量寫文件速度越來越慢
可能是你頻繁創建並寫文件導致磁碟跟不上了吧..,你在for循環裡面加個Thread.sleep(1000),每版個文權件的復制時間應該不會出超過1秒的了.另外我用固態硬碟試了試,後面幾個也會變慢,不過好一點,300多ms.
⑤ 有關java byte類型的二維數組問題
首先:無
其次:
guave
Files.toByteArray(File)
ByteStreams.toByteArray(InputStream)
apache commons
IOUtils.toByteArray(InputStream input)
⑥ Java中圖片轉換成位元組流用哪些個類
publicbyte[] SetImageToByteArray(string fileName)
{
FileStream fs =newFileStream(fileName, FileMode.Open);
intstreamLength = (int)fs.Length;byte[] image =newbyte[streamLength];
fs.Read(image,0, streamLength);
fs.Close();
returnimage;
}
這個能行
⑦ java File 類型 轉換成 MultipartFile
File file = new File("src/test/resources/input.txt");
FileInputStream input = new FileInputStream(file);
MultipartFile multipartFile = new MockMultipartFile("file",
file.getName(), "text/plain", IOUtils.toByteArray(input));
從國外網站上搜到的,IOUtils.toByteArray(input)不識別時,可直接使用上面 FileInputStream 類型的input做第四個參數也是可以的。
親測有效!
⑧ java中如何將一個zip文件轉為byte數組
input1.read(data1);
這一句執行好data1 就是文件的byte數組了!!!
String str = new String(data1);//轉換成專string
下面不要了屬
for (int length1 = 0; (length1 = input1.read(data1)) > 0;) { output.write(data1, 0, length1); }
⑨ java網路通信如何使用位元組類傳送位元組數據
伺服器端
DataInputStream inData;
socket = serverSocket.accept();
inData = new DataInputStream(socket.getInputStream());
outData = new DataOutputStream(socket.getOutputStream());
byte[] b = ("hello world").getBytes();
outData.write(b,0,b.lenth);
客戶端是
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
byte[] b ;
ByteArrayOutputStream out1 = new ByteArrayOutputStream();
while (in.available() != 0) {
out1.write(in.read());
}
b = out1.toByteArray();
return new String(b);
轉換的時候有問題
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
byte[] b = new byte[in.available()];
for(int i = 0;i < b.length;i++){
b[i] = (byte)in.read();
}
String s = new String(b);