精华内容
下载资源
问答
  • 目标文件操作的作用文件的基本操作打开读写关闭文件备份文件和文件夹的操作一. 文件操作的作用思考:文件操作包含什么?答:打开、关闭、读、写、复制....... 文件的基本操作2.1 文件操作步骤打开文...

    目标

    文件操作的作用

    文件的基本操作打开

    读写

    关闭

    文件备份

    文件和文件夹的操作

    一. 文件操作的作用

    思考:文件操作包含什么?

    答:打开、关闭、读、写、复制....

    思考:文件操作的的作用是什么?

    答:读取内容、写入内容、备份内容......

    总结:文件操作的作用就是==把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力==。

    二. 文件的基本操作

    2.1 文件操作步骤

    打开文件

    读写等操作

    关闭文件

    注意:可以只打开和关闭文件,不进行任何读写操作。

    2.1.1 打开

    在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:

    open(name, mode)

    name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。

    mode:设置打开文件的模式(访问模式):只读、写入、追加等。

    2.1.1.1 打开文件模式

    模式

    描述

    r

    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

    rb

    以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

    r+

    打开一个文件用于读写。文件指针将会放在文件的开头。

    rb+

    以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

    w

    打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

    wb

    以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

    w+

    打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

    wb+

    以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

    a

    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

    ab

    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

    a+

    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

    ab+

    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

    2.1.1.2 快速体验

    f = open('test.txt', 'w')

    注意:此时的f是open函数的文件对象。

    2.1.2 文件对象方法

    2.1.2.1 写

    语法

    对象对象.write('内容')

    体验

    # 1. 打开文件

    f = open('test.txt', 'w')

    # 2.文件写入

    f.write('hello world')

    # 3. 关闭文件

    f.close()

    注意:

    w和a模式:如果文件不存在则创建该文件;如果文件存在,w模式先清空再写入,a模式直接末尾追加。

    r模式:如果文件不存在则报错。

    2.1.2.2 读

    read()

    文件对象.read(num)

    num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

    readlines()

    readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

    f = open('test.txt')

    content = f.readlines()

    # ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']

    print(content)

    # 关闭文件

    f.close()

    readline()

    readline()一次读取一行内容。

    f = open('test.txt')

    content = f.readline()

    print(f'第一行:{content}')

    content = f.readline()

    print(f'第二行:{content}')

    # 关闭文件

    f.close()

    2.1.2.3 seek()

    作用:用来移动文件指针。

    语法如下:

    文件对象.seek(偏移量, 起始位置)

    起始位置:

    0:文件开头

    1:当前位置

    2:文件结尾

    2.1.3 关闭

    文件对象.close()

    三. 文件备份

    需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:test[备份].txt)。

    3.1 步骤

    接收用户输入的文件名

    规划备份文件名

    备份文件写入数据

    3.2 代码实现

    接收用户输入目标文件名

    old_name = input('请输入您要备份的文件名:')

    规划备份文件名

    2.1 提取目标文件后缀

    2.2 组织备份的文件名,xx[备份]后缀

    # 2.1 提取文件后缀点的下标

    index = old_name.rfind('.')

    # print(index) # 后缀中.的下标

    # print(old_name[:index]) # 源文件名(无后缀)

    # 2.2 组织新文件名 旧文件名 + [备份] + 后缀

    new_name = old_name[:index] + '[备份]' + old_name[index:]

    # 打印新文件名(带后缀)

    # print(new_name)

    备份文件写入数据

    3.1 打开源文件 和 备份文件

    3.2 将源文件数据写入备份文件

    3.3 关闭文件

    # 3.1 打开文件

    old_f = open(old_name, 'rb')

    new_f = open(new_name, 'wb')

    # 3.2 将源文件数据写入备份文件

    while True:

    con = old_f.read(1024)

    if len(con) == 0:

    break

    new_f.write(con)

    # 3.3 关闭文件

    old_f.close()

    new_f.close()

    3.3 思考

    如果用户输入.txt,这是一个无效文件,程序如何更改才能限制只有有效的文件名才能备份?

    答:添加条件判断即可。

    old_name = input('请输入您要备份的文件名:')

    index = old_name.rfind('.')

    if index > 0:

    postfix = old_name[index:]

    new_name = old_name[:index] + '[备份]' + postfix

    old_f = open(old_name, 'rb')

    new_f = open(new_name, 'wb')

    while True:

    con = old_f.read(1024)

    if len(con) == 0:

    break

    new_f.write(con)

    old_f.close()

    new_f.close()

    四. 文件和文件夹的操作

    在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:

    导入os模块

    import os

    使用os模块相关功能

    os.函数名()

    4.1 文件重命名

    os.rename(目标文件名, 新文件名)

    4.2 删除文件

    os.remove(目标文件名)

    4.3 创建文件夹

    os.mkdir(文件夹名字)

    4.4 删除文件夹

    os.rmdir(文件夹名字)

    4.5 获取当前目录

    os.getcwd()

    4.6 改变默认目录

    os.chdir(目录)

    4.7 获取目录列表

    os.listdir(目录)

    五.应用案例

    需求:批量修改文件名,既可添加指定字符串,又能删除指定字符串。

    步骤

    设置添加删除字符串的的标识

    获取指定目录的所有文件

    将原有文件名添加/删除指定字符串,构造新名字

    os.rename()重命名

    代码

    import os

    # 设置重命名标识:如果为1则添加指定字符,flag取值为2则删除指定字符

    flag = 1

    # 获取指定目录

    dir_name = './'

    # 获取指定目录的文件列表

    file_list = os.listdir(dir_name)

    # print(file_list)

    # 遍历文件列表内的文件

    for name in file_list:

    # 添加指定字符

    if flag == 1:

    new_name = 'Python-' + name

    # 删除指定字符

    elif flag == 2:

    num = len('Python-')

    new_name = name[num:]

    # 打印新文件名,测试程序正确性

    print(new_name)

    # 重命名

    os.rename(dir_name+name, dir_name+new_name)

    六. 总结

    文件操作步骤

    打开

    文件对象 = open(目标文件, 访问模式)

    操作

    文件对象.read()

    文件对象.readlines()

    文件对象.readline()

    文件对象.write()

    seek()

    关闭

    文件对象.close()

    主访问模式

    w:写,文件不存在则新建该文件

    r:读,文件不存在则报错

    a:追加

    文件和文件夹操作

    重命名:os.rename()

    获取当前目录:os.getcwd()

    获取目录列表:os.listdir()

    展开全文
  • 步骤如下:一、关闭apache和mysql.service httpd stopservice mysqld stop二、将/var/lib下mysql目录mv(移动)到data目录。为什么要用mv命令,而不用cp命令呢?应为linux文件系统特殊性,mv命令能保留文件...

    由于yum安装mysql的时候,数据库的data目录默认是在/var/lib下,出于数据安全性的考虑需要把它挪到/data分区。步骤如下:

    一、关闭apache和mysql.

    service httpd stop

    service mysqld stop

    二、将/var/lib下的mysql目录mv(移动)到data目录。

    为什么要用mv命令,而不用cp命令呢?应为linux文件系统特殊性,mv命令能保留文件的所有属性和权限,尤其是selinux属性。如果用cp命令,就需要回头再去设置mysql文件夹的selinux属性,本人因很头疼selinux故能避则避。

    mv -R /var/lib/mysql /data/mysql

    三、修改mysql配置文件/etc/my.cnf。将datadir和socket的路径改为/data目录下。

    [mysqld]

    #datadir=/var/lib/mysql                      ------原系统默认路径

    datadir=/home/mysql ------现有路径

    #socket=/var/lib/mysql/mysql.sock            ------原socket路径现

    socket=/home/mysql/mysql.sock                ------现有路径

    [mysqld_safe]

    socket=/home/mysql/mysql.sock                 -----现有路径

    [client]

    socket=/home/mysql/mysql.sock                 -----现有路径

    [mysql.server]

    socket=/home/mysql/mysql.sock                 -----现有路径

    四、修改php配置文件(/etc/php.ini)中的socket路径。没错,千万不要忘记了php.ini里也要指明socket的路径,否则php网站会无法连接到数据库的。php.ini里默认socket路径是空的,默认是指向/var/lib/mysql,所以也要改为/data/mysql.

    [mysql]

    mysql.default_socket = /home/mysql/mysql.sock

    [mysqli]

    mysql.default_socket = /home/mysql/mysql.sock

    五、启动apache.mysql.

    service httpd start

    service mysqld start

    展开全文
  • 一:部署linux + nginx部署后台代码1.1 由于本人采用的是idea工具开发,所以在terminal中mvn clean package生成对应jar包,此jar包可去对应文件所在目录target查找。1.2 将jar复制到linux之中。部署前端代码2.1 ...

    最近部署若依项目,一直部署失败,多亏有好人将这篇文章相赠,特地分享出来供大家学习参考,希望大家共同进步。

    一:部署linux + nginx

    部署后台代码

    1.1 由于本人采用的是idea工具开发,所以在terminal中mvn clean package生成对应的jar包,此jar包可去对应文件所在目录的target查找。

    1.2 将jar复制到linux之中。

    部署前端代码

    2.1 使用npm run build:prod --report将前端项目打包,将会在前端目录下生成一个dist文件夹。

    2.2 同样将dist复制到linux之中。

    linux服务器中需要装载redis以及nginx,redis是存放缓存数据,nginx是用于代理前后端服务。

    3.1 安装redis并启动。

    3.2 安装nginx并修改相关配置。

    找到nginx所在目录,并修改conf/nginx.conf文件,修改如下图:

    cf2dcc3856a528520ddc50950c41e1e7.png

    代码:

    worker_processes  1;events {    worker_connections  1024;}http {    include mime.types;    default_type application/octet-stream;    sendfile on;    keepalive_timeout 65;  server {    listen 80; # 监听的端口    server_name 自己的服务器地址; # 域名或ip        location / {  # 访问路径配置      root /usr/local/ruoyi/dist/;# 根目录      try_files $uri $uri/ /index.html;      index index.html index.htm; # 默认首页    }            location /prod-api/ {      proxy_set_header Host $http_host;      proxy_set_header X-Real-IP $remote_addr;      proxy_set_header REMOTE-HOST $remote_addr;      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      proxy_pass http://localhost:8080/;    }         }}

    4. 启动jar包,并启动nginx,在windows浏览器中直接输入ip即可访问。

        4.1 jar后台启动,后台启动的话可以进行其他操作,否则将无法进行其他操作。

    nohup java -jar jarName >msg.log 2>&1 &

    msg.log文件是在输入上一行启动命令的当前目录下

    5. 有的小伙伴可能第一次打包放上去没问题,但是后期修改了一些文件或者菜单等,再部署上去可能会遇到菜单打不开之类的问题

    6850b7e33c9c0e03ef79656164c357e0.png

    不要慌,只要修改vue.config.js文件里面的配置就好,如下图,去掉/之前的.即可

    69e81297ef4f936bc710aebba76e7967.png

    二:部署windows + tomcat(无nginx)

    1. 修改pom文件,改jar为war:

    dc56fd8e66684a9d659d65f57b96efcb.png

    打包成war包之后直接复制到windows中的tomcat的webapps目录下,并修改名称为prod-api,类似部署在linux中需要修改nginx.conf的配置。

    将vue项目打包并把dist文件复制到tomcat的webapps目录下。

    修改tomcat目录下的conf文件夹下的service.xml:

    4.1 启动端口为后台的启动端口

    4.2 在host节点下添加对应的访问路径配置代码

    18ba95afd915cefeab13255cf9485440.png

    <Context path="/" docBase="dist的绝对路径(也可以写相对于webapps的路径)" reloadable="true" crossContext="true">Context>

    如果不添加此处代码,登录是可以的,但是登陆之后是空白页,因为在本地的运行的项目是类似ip:端口/router地址的,如果不修改,将会导致前面所说的问题。(不知道说的对不对,个人猜想)

    启动tomcat,输入ip:端口即可。

    以上操作之后刷新页面的话会存在404错误,所以需要在dist目录的文件夹下新建WEB-INF文件夹,并在里面添加web.xml文件:

    web.xml文件代码如下:

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee        http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"        version="3.1" metadata-complete="true">     <display-name>Router for Tomcatdisplay-name>     <error-page>        <error-code>404error-code>        <location>/index.htmllocation>    error-page>web-app>

    三:解决调用第三方api如百度地图api所存在的跨域问题

    d1ee3309673d568bdc20e1d80fdf2f4e.png

    展开全文
  • 因为这个程序本身上传文件,重复的文件理论上可以上传,没什么毛病,几个点击按钮超链接特别丑,自己用css搞起来; 直奔主题 第一步,去uploadify官网下载插件,uplaodify.zip,去apache下载上传需要...

    一点说明:此代码没有对重复的图片进行处理,也就是说,同一张图片选择多次就可以传入多次,如果单独上传图片的要注意这一点;因为这个程序本身是上传文件用的,重复的文件理论上是可以上传的,没什么毛病,几个点击按钮的超链接特别丑,自己用css搞起来;

    直奔主题

    第一步,去uploadify官网下载插件,uplaodify.zip,去apache下载上传需要的jar包:commons-fileupload-1.3.3.jar,commons-io-2.5.jar,commons-codec-1.10.jar,版本不限,百度都特别容易找到,直接百度commons-fileupload等。。。


    第二步:建立web项目:结构如下:对应位置,放进去,记得看下jar包有么有buildpath进去


    第三步:各个位置的代码:

    首先是 web.xml里面的内容,建议直接复制粘贴,注意里面servlet的class对应好upload类

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        
      <servlet>
        <servlet-name>upload</servlet-name>
        <servlet-class>com.xxx.upload.Upload</servlet-class>
      </servlet>
     
      <servlet-mapping>
        <servlet-name>upload</servlet-name>
        <url-pattern>/servlet/Upload</url-pattern>
      </servlet-mapping>
     
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    其次是jsp,里面包含了js代码,几个alert弹窗着实烦人,尝试成功以后,把alert全部注释掉好了

    <%@ page language="java" contentType="text/html; charset=utf-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>Upload</title>
     
    <!--装载文件-->
    <link href="<%=request.getContextPath()%>/css/uploadify.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="<%=request.getContextPath()%>/uploadify/jquery.min.js"></script>
    <script type="text/javascript" src="<%=request.getContextPath()%>/uploadify/jquery.uploadify.min.js"></script>
    
    <!--ready事件-->
    <script type="text/javascript">
        $(document).ready(function() {
            $("#uploadify").uploadify({
                'uploader' : 'servlet/Upload',
                'swf' : 'uploadify/uploadify.swf',
                'cancelImg' : 'img/uploadify-cancel.png',
                'folder' : 'uploads',//您想将文件保存到的路径
                'queueID' : 'fileQueue',//与下面的id对应
                'queueSizeLimit' : 5,
                'fileDesc' : 'rar文件或zip文件',
                'fileExt' : '*.rar;*.zip', //控制可上传文件的扩展名,启用本项时需同时声明fileDesc
                'auto' : false,
                'multi' : true,
                'simUploadLimit' : 2,
                'buttonText' : '选择文件',
               	'onDialogOpen' : function() {//当选择文件对话框打开时触发
               		alert( 'Open!');
               	},
               	'onSelect' : function(file) {//当每个文件添加至队列后触发
               		alert( 'id: ' + file.id
               				+ ' - 索引: ' + file.index
               				+ ' - 文件名: ' + file.name
               				+ ' - 文件大小: ' + file.size
               				+ ' - 类型: ' + file.type
               				+ ' - 创建日期: ' + file.creationdate
               				+ ' - 修改日期: ' + file.modificationdate
               				+ ' - 文件状态: ' + file.filestatus);
               	},
               	'onSelectError' : function(file,errorCode,errorMsg) {//当文件选定发生错误时触发
               		alert( 'id: ' + file.id
               			+ ' - 索引: ' + file.index
               			+ ' - 文件名: ' + file.name
             			+ ' - 文件大小: ' + file.size
               			+ ' - 类型: ' + file.type
               			+ ' - 创建日期: ' + file.creationdate
               			+ ' - 修改日期: ' + file.modificationdate
               			+ ' - 文件状态: ' + file.filestatus
               			+ ' - 错误代码: ' + errorCode
               			+ ' - 错误信息: ' + errorMsg);
               	},
               	'onDialogClose' : function(swfuploadifyQueue) {//当文件选择对话框关闭时触发
    				if( swfuploadifyQueue.filesErrored > 0 ){
              			alert( '添加至队列时有'
    						+swfuploadifyQueue.filesErrored
    	           			+'个文件发生错误n'
    	           			+'错误信息:'
    	           			+swfuploadifyQueue.errorMsg
    	           			+'n选定的文件数:'
    	           			+swfuploadifyQueue.filesSelected
    	           			+'n成功添加至队列的文件数:'
    	           			+swfuploadifyQueue.filesQueued
    	           			+'n队列中的总文件数量:'
    	       				+swfuploadifyQueue.queueLength);
               		}
               	},
               	'onQueueComplete' : function(stats) {//当队列中的所有文件全部完成上传时触发
               		alert( '成功上传的文件数: ' + stats.successful_uploads
               			+ ' - 上传出错的文件数: ' + stats.upload_errors
               			+ ' - 取消上传的文件数: ' + stats.upload_cancelled
               			+ ' - 出错的文件数' + stats.queue_errors);
               	},
               	'onUploadComplete' : function(file,swfuploadifyQueue) {//队列中的每个文件上传完成时触发一次
               		alert( 'id: ' + file.id
               			+ ' - 索引: ' + file.index
               			+ ' - 文件名: ' + file.name
               			+ ' - 文件大小: ' + file.size
               			+ ' - 类型: ' + file.type
               			+ ' - 创建日期: ' + file.creationdate
               			+ ' - 修改日期: ' + file.modificationdate
               			+ ' - 文件状态: ' + file.filestatus);
               	},
               	'onUploadError' : function(file,errorCode,errorMsg,errorString,swfuploadifyQueue) {//上传文件出错是触发(每个出错文件触发一次)
               		alert( 'id: ' + file.id
               			+ ' - 索引: ' + file.index
               			+ ' - 文件名: ' + file.name
               			+ ' - 文件大小: ' + file.size
               			+ ' - 类型: ' + file.type
               			+ ' - 创建日期: ' + file.creationdate
               			+ ' - 修改日期: ' + file.modificationdate
               			+ ' - 文件状态: ' + file.filestatus
               			+ ' - 错误代码: ' + errorCode
               			+ ' - 错误描述: ' + errorMsg
               			+ ' - 简要错误描述: ' + errorString);
               	},
               	'onUploadProgress' : function(file,fileBytesLoaded,fileTotalBytes,queueBytesLoaded,swfuploadifyQueueUploadSize) {//上传进度发生变更时触发
               		alert( 'id: ' + file.id
               			+ ' - 索引: ' + file.index
               			+ ' - 文件名: ' + file.name
               			+ ' - 文件大小: ' + file.size
               			+ ' - 类型: ' + file.type
               			+ ' - 创建日期: ' + file.creationdate
               			+ ' - 修改日期: ' + file.modificationdate
               			+ ' - 文件状态: ' + file.filestatus
               			+ ' - 当前文件已上传: ' + fileBytesLoaded
               			+ ' - 当前文件大小: ' + fileTotalBytes
               			+ ' - 队列已上传: ' + queueBytesLoaded
               			+ ' - 队列大小: ' + swfuploadifyQueueUploadSize);
               	},
               	'onUploadStart': function(file) {//上传开始时触发(每个文件触发一次)
               		alert( 'id: ' + file.id
               			+ ' - 索引: ' + file.index
               			+ ' - 文件名: ' + file.name
               			+ ' - 文件大小: ' + file.size
               			+ ' - 类型: ' + file.type
               			+ ' - 创建日期: ' + file.creationdate
               			+ ' - 修改日期: ' + file.modificationdate
               			+ ' - 文件状态: ' + file.filestatus );
               	},
               	'onUploadSuccess' : function(file,data,response) {//上传完成时触发(每个文件触发一次)
               		alert( 'id: ' + file.id
               			+ ' - 索引: ' + file.index
               			+ ' - 文件名: ' + file.name
               			+ ' - 文件大小: ' + file.size
               			+ ' - 类型: ' + file.type
               			+ ' - 创建日期: ' + file.creationdate
               			+ ' - 修改日期: ' + file.modificationdate
               			+ ' - 文件状态: ' + file.filestatus
               			+ ' - 服务器端消息: ' + data
               			+ ' - 是否上传成功: ' + response);
               	}
            });
        });
    </script>
    </head>
     
    <body>
        <div id="fileQueue"></div>
        <input type="file" name="uploadify" id="uploadify" />
        <p>
        	<!-- 上传第一个未上传的文件 -->
          	<a href="javascript:$('#uploadify').uploadify('upload')">上传</a>
          	<!-- 取消第一个未取消的文件 -->
            <a href="javascript:$('#uploadify').uploadify('cancel')">取消上传</a>
            <a href="javascript:$('#uploadify').uploadify('upload','*')">开始上传所有文件</a> 
            <a href="javascript:$('#uploadify').uploadify('cancel','*')">取消所有上传</a>
        </p>
    </body>
    </html>

    最后,Java后台代码

    package com.xxx.upload;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;
    import java.util.UUID;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    @SuppressWarnings("serial")
    public class Upload extends HttpServlet {
    
    	@SuppressWarnings("unchecked")
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    		String savePath = this.getServletConfig().getServletContext().getRealPath("");
    		savePath = savePath + "/uploads/";
    
    		File f1 = new File(savePath);
    		System.out.println(savePath);
    		if (!f1.exists()) {
    			f1.mkdirs();
    		}
    		DiskFileItemFactory fac = new DiskFileItemFactory();
    		ServletFileUpload upload = new ServletFileUpload(fac);
    		upload.setHeaderEncoding("utf-8");
    		List fileList = null;
    		try {
    			fileList = upload.parseRequest(request);
    		} catch (FileUploadException ex) {
    			return;
    		}
    		Iterator<FileItem> it = fileList.iterator();
    		String name = "";
    		String extName = "";
    		while (it.hasNext()) {
    			FileItem item = it.next();
    			if (!item.isFormField()) {
    				name = item.getName();
    				long size = item.getSize();
    				String type = item.getContentType();
    				System.out.println(size + " " + type);
    				if (name == null || name.trim().equals("")) {
    					continue;
    				}
    				// 扩展名格式:
    				if (name.lastIndexOf(".") >= 0) {
    					extName = name.substring(name.lastIndexOf("."));
    				}
    				File file = null;
    				do {
    					// 生成文件名:
    					name = UUID.randomUUID().toString();
    					file = new File(savePath + name + extName);
    				} while (file.exists());
    				File saveFile = new File(savePath + name + extName);
    				try {
    					item.write(saveFile);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		response.getWriter().print(name + extName);
    	}
    }
    


    至此结束,可以用服务器发布跑起来试试,应该没什么问题

    最后去服务器下面去检查,文件是否已经上传成功!!


    展开全文
  • 无论是什么格式 只要是文件 都是以字节方式存储在计算机中 因此 使用字节流方式 可以读写任意的文件 需要两个流 一读一写 一个读取被复制的文件 一个写到目标目录中 步骤: 1、创建一个字节输入流对象 构造...
  • 由于yum安装mysql时候,数据库data目录默认在/var/lib下,出于数据安全性考虑需要把它挪到/data分区。步骤如下:一、关闭apache和mysql.复制代码 代码如下:service httpd stopservice mysqld stop二、将/var...
  • 本内容来源于@什么值得买SMZDM.COM|作者:新昼前言像有一些软件,它们缓存默认存在C盘并且没法设置,有时候突然出错就是容量不足,这时候只能重新启动软件。刚刚发现我C盘最近只剩下20+GB空间了,简单整...
  • 由于yum安装mysql时候,数据库data目录默认在/var/lib下,出于数据安全性考虑需要把它挪到/data分区。步骤如下:一、关闭apache和mysql.复制代码 代码如下:service httpd stopservice mysqld stop二、将/var...
  • ![图片说明](https://img-ask.csdn.net/upload/202008/25/1598356638_694978.png) ![图片说明]... 我根据下面这步骤,hadoop.dll文件复制到了system下重启了电脑,但是连接时候就是窗口 ,郁闷!
  • 共享权限的复制

    千次阅读 2010-11-01 22:19:00
    实行下面两个方法前提,我们已经用XCOPY与ROBOCOPY将文件夹或者文件连同NTFS权限已经复制到另一台机器上了。 NTFS和共享权限的复制是两个步骤。 方法 1:可以用Resource Kit Tools中PermCopy程序将共
  • 小伙伴把移动硬盘或 U 盘接入到 Mac 电脑上,当把文件拷贝到移动硬盘时,会发现不能复制文件到移动硬盘。这里因为移动硬盘或 U 盘使用 Windows 系统下 NTFS 分区格式,而 Mac 系统原生不支持这种格式,...
  • mongo是什么?MongoDB能够使企业更加具有敏捷性和可扩展性,各种规模企业都可以通过使用MongoDB来创建新应用,提高与客户之间工作效率,加快产品上市时间,以及降低企业成本。遇到问题有些人不正规备份或数据...
  • CDH 6.x版本踩过坑 CDH搭建时没有装TLS安全认证(当时直接...无法复制安装文件什么报这个错? 原因你不仅没有安装TLS认证,你又想从官网上下载包,导致下载失败! 解决方案就是配置本地库喽~~~~~ 在上一...
  • 执行步骤如下客户端发起请求上传图片服务端打开文件上传入口服务端接收客户端发来的base64字节码的数据服务端判断文件的是什么样的文件比如说图片视频 压缩包等服务端获取到客户端上传的文件名字服务端创建一个文件...
  • 目录一、IO概述1.什么是IO2.IO的分类3.父类4.操作 IO流的步骤二、字节流1.一切皆为字节2.字节输入流【InputStream】1)FileInputStream类3.字节输出流【OutputStream】1)FileOutputStream类2)数据...文件的复制
  • 为什么我添加contextPath之后就不能访问static文件下面index.html呢? 背景介绍: springboot整合vue项目,采用前后端分离...请问各位大佬这是什么原因?大家有什么解决办法吗?望各位大佬不吝赐教。 小弟我跪谢
  • 我觉得,搭建一个框架教程,没有结构图就是扯淡,鬼知道你文件放在什么位置。。。好几个教程都这样,不知道抄袭还是怎么样。 顺便说一下,本文没有那么多原理,思想,教程,目的只有一个,快速搭建项目,至于...
  • 数据库主从复制

    2019-05-31 15:26:47
    mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫A,从服务器叫B;主从复制就是B跟着A学,A做什么,B就做什么。那么B怎么同步A动作呢?现在A有一个日志功能,把自己所做增删改查动作全都记录...
  • 我们经常会遇到这样那样的问题,PDF文档的处理、文档的翻译也将一个很大的问题,自己在最近的工作终于到的就是一个典型的问题,文档翻译以前必须使用Word或者Google 翻译来回折腾,操作的步骤还是真的有点复杂。...
  • Redis主从复制

    2018-11-22 17:02:00
    第一次、Slave向Master同步实现: Slave向Master发出同步请求(发送sync命令),Master先dump出rdb文件... 但不管什么原因导致Slave和Master断开重连都会重复以上两个步骤的过程。 Redis主从复制是建立在内存...
  • 对于我个人,经常写些demo,或者写一个新项目时候,要么就是把以前项目模板复制一份,要么就是重新搭建一份,显得比较麻烦,浪费时间,所以就有了搭建一个能满足自己需要脚手架。 脚手架效果 这一个基本...
  • 我们的项目用的Vant组件,然后我就直接去Vant的组件官网查看上传文件的使用方法,然后直接看着官网API教程使用即可,如果有什么疑问还可以问度娘、问朋友。 废话不多说,接下来就来分享一下具体的上传图片方法,...
  •  然后再利用这些技术文件和生产文件进行PCB制板、元器件焊接、飞针测试、电路板调试,完成原电路板样板完整复制。 对于PCB抄板,很多人不了解,到底什么是PCB抄板,有些人甚至认为PCB抄板就是山寨。 山寨在大家...
  • 如果您在加载 DgnLsPurge.dll 时遇到问题,请检查 .dll 文件的特性,方法选择该文件、单击 鼠标右键,然后选择“特性”。在某些情况下,系统的安全设置可能阻止加载 .dll。如果这种 情况,可以通过选择特性的...
  • 文件操作

    2020-09-26 09:02:12
    思考:文件操作的的作用是什么? 答:读取内容、写入内容、备份内容… 总结:文件操作的作用就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。 二. 文件的...
  • 至于为什么很多网上过程都无法成功,最主要的是: 1.在编译zlib和openssl时候一定要在cflags中手动加-fPIC选项,防止之后bad value问题出现 2.编译安装openssl后,需要将安装后的文件复制一份到/usr/local/ssl...
  • 上图中,做的例子无许修改字体文件的名字,因为对于引用来说没什么用,所以下载下来是什么名字就是什么名字,没做修改。 2.选中字体文件,在属性面板修改生成操作:资源 3.下载一个软件F...
  • 执行步骤如下客户端发起请求上传图片服务端打开文件上传入口服务端接收客户端发来的base64字节码的数据服务端判断文件的是什么样的文件比如说图片视频 压缩包等服务端获取到客户端上传的文件名字服务端创建一个文件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 405
精华内容 162
关键字:

复制文件的步骤是什么