100分:FTp上传程序问题,关于如何用String类型读写Byte数据

100分:FTp上传程序问题,关于如何用String类型读写Byte数据,第1张

用Api函数CopyMemory

或者你应该用Byte数组?

看看这里

http://9iyou.com/Program_Data/VB-12012.html

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Public Function Str2Byt(ByVal s As String) As Variant

Dim bytVar() As Byte

Dim n As Integer

n = LenB(s)

ReDim bytVar(n)

CopyMemory ByVal VarPtr(bytVar(0)), ByVal StrPtr(s), n

Str2Byt = bytVar

End Function

老师笔记

命令详解

1、目前计算机系统中都是用bytes(字节)单位来计量

2、事实上计算机最小的计量单位是bits(位)

3、1byte=8 bits

4、假设byte可以看成底下到模样

5、8个空格就是8个位,而每个空格可以是0或1,现在假设我们只存入了一个1,那会剩余到7个空位,默认情况下这7个空位无法在写入数据。

6、但压缩技术就是把这些没用到到空间提出来,以让档案占用到空间变小

重点!

Linux 系统不以扩展名为文件类型识别的依据,这里的扩展名只是让用户易于分辨。

常见命令工具

gzip, bzip2 以及 xz ,这些都只能对单个文件进行压缩,不能操作目录。

tar 可以对一个到多个文件或者一个目录进行打包成一个单一的文件,但单独使用 tar 命令时,只是打包,不压缩。

后来, GNU 计划 中,将整个 tar 与压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的压缩与打包功能!

示例: 备份系统的配置文件,并且保留源文件的权限和属性信息

查看

解压

打包压缩的时候可以排除一个或者多个文件或者目录

老师笔记

记录系统活动信息有几个文件,他们分别记录了不同的信息。

例如:何时、何地 (来源 IP)、何人 (账户或者服务名称)、做了什么动作 。

换句话说就是:记录系统在什么时候由哪个程序做了什么样的行为时,发生了何种的事件等等

其实,不止系统有日志,在系统上运行的很多应用程序(软件) 都有自己的日志记录。比如 MySQL 默认的日志是 /var/log/mysqld.log

这些日志是我们排除的首要入手点,假如系统或者服务出现了错误,要第一时间分析日志中的报错信息。而不是去到网上搜索报错信息。因为大部分时候,一个报错信息,有可能会有多种情况导致,所以要结合自己的系统环境分析具体的情况。

CentOS 使用 rsyslog.service 这个服务来统一管理这些系统日志文件。

既然是服务,就会有配置文件.

配置文件用于设置

比如:

Linux 核心的 syslog 认识的服务类型主要有下面这些:

Linux 核心的 syslog 定义的日志级别:

编辑 /etc/rsyslog.conf 文件

保存退出后

重启服务

通过配置 /etc/rsyslog.conf 可以把一个 Linux 主机配置成一台 日志服务器,这样其他 Linux 主机的日志,除了记录在自己的本地外,还会发送的这台日志到服务器上一份。

编辑 /etc/rsyslog.conf

重启服务

检查监听端口

编辑 /etc/rsyslog.conf

什么是日志轮转,为什么要轮转

日志轮转也叫日志的切割,通俗来讲就是对日志文件进行大小的控制。

Linux 系统通常会长时间的不停机运行,这样就会产生好多信息记录到不同的日志中。随着时间的推移,日志的容量自然会越来越大,那问题就来了,硬盘的空间是有限的,那为了控制日志文件的大小,就需要对日志文件进行控制。

同时是把目前的日志文件改名,紧接着创建一个新的日志文件,名称和原来的一样,重启服务进程,让其向新的日志文件中写日志。

logrotate 负责对系统日志的轮转。

通过定时任务每天都会执行一次。

logrotate 的主要功能就是将旧的日志文件改成旧文件, 并且重新创建一个新的空的文件来记录。

如下图:

/etc/logrotate.conf 的默认值

假如,想对某个日志文件实现轮转,建议在 /etc/logrotate.d/ 目录中添加子配置文件

比如

在 目录下编辑一个文件

可以使用 logrotate 命令测试

老师笔记

通过工具类来实现本地路径定义和下载即可。

import hkrt.b2b.view.util.Log

import hkrt.b2b.view.util.ViewUtil

import java.io.ByteArrayOutputStream

import java.io.FileInputStream

import java.io.FileOutputStream

import java.io.InputStream

import org.apache.commons.net.ftp.FTPClient

import org.apache.commons.net.ftp.FTPFile

public class CCFCCBFTP {

/**

* 上传文件

*

* @param fileName

* @param plainFilePath 明文文件路径路径

* @param filepath

* @return

* @throws Exception

*/

public static String fileUploadByFtp(String plainFilePath, String fileName, 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("加密上传文件开始")

Log.info("连接远程上传服务器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22)

ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22)

ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD)

FTPFile[] fs

fs = ftpClient.listFiles()

for (FTPFile ff : fs) {

if (ff.getName().equals(filepath)) {

bl="true"

ftpClient.changeWorkingDirectory("/"+filepath+"")

}

}

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, fis)

Log.info("上传文件成功:"+fileName+"。文件保存路径:"+"/"+filepath+"/")

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)

}

}

}

}

/**

*下载并解压文件

*

* @param localFilePath

* @param fileName

* @param routeFilepath

* @return

* @throws Exception

*/

public static String fileDownloadByFtp(String localFilePath, String fileName,String routeFilepath) throws Exception {

FileInputStream fis = null

ByteArrayOutputStream bos = null

FileOutputStream fos = null

FTPClient ftpClient = new FTPClient()

String SFP = System.getProperty("file.separator")

String bl = "false"

try {

Log.info("下载并解密文件开始")

Log.info("连接远程下载服务器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22)

ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22)

ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD)

CMBCUtil.CMBCLOGINPASSWORD)

FTPFile[] fs

ftpClient.makeDirectory(routeFilepath)

ftpClient.changeWorkingDirectory(routeFilepath)

bl = "false"

fs = ftpClient.listFiles()

for (FTPFile ff : fs) {

if (ff.getName().equals(fileName)) {

bl = "true"

Log.info("下载文件开始。")

ftpClient.setBufferSize(1024)

// 设置文件类型(二进制)

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE)

InputStream is = ftpClient.retrieveFileStream(fileName)

bos = new ByteArrayOutputStream(is.available())

byte[] buffer = new byte[1024]

int count = 0

while ((count = is.read(buffer)) != -1) {

bos.write(buffer, 0, count)

}

bos.flush()

fos = new FileOutputStream(localFilePath+SFP+fileName)

fos.write(bos.toByteArray())

Log.info("下载文件结束:"+localFilePath)

}

}

Log.info("检查文件是否存:"+fileName+" "+bl)

if("false".equals(bl)){

ViewUtil.dataSEErrorPerformedCommon("查询无结果,请稍后再查询。")

return bl

}

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)

}

}

if (fos != null) {

try {

fos.close()

} catch (Exception e) {

Log.info(e.getLocalizedMessage(), e)

}

}

}

}

// 调用样例:

public static void main(String[] args) {

try {

// 明文文件路径

String plainFilePath = "D:/req_20150204_0011.txt"

// 密文文件路径

String secretFilePath = "req_20150204_00134.txt"

fileDownloadByFtp("D://123.zip","123.zip","req/20150228")

} catch (Exception e) {

e.printStackTrace()

}

}

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/53906.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-26
下一篇2023-02-26

发表评论

登录后才能评论

评论列表(0条)

    保存