精华内容
下载资源
问答
  • 如果你想打印多个excel文件,你得一个一个打开然后点打印,有了这个工具就方便多了,将需要打印多个excel文件放到同一文件夹中,将本工具也放到相同文件夹下,然后打开本工具,点击上面的取込,这样就可以把所有...
  • PB9利用PDF虚拟机打印导出PDF文件,并支持打印在同份PDF中,内含PB9的DEMO代码以及PDF虚拟机打印程序。
  • grep 同时查找多个文件

    万次阅读 2020-04-01 16:22:22
    有时候难免会遇到 想同时处理 多个文件的 情况,但其他情况使用都很正常,比如touch file1 file2 … mkdir file1 file2 同时写空多个文件…. 这些都行 , 直到有一天 我想grep 多个条件打印到屏幕,才发现 竟然不行 ...

    说明

    有时候难免会遇到 想同时处理 多个文件的 情况,但其他情况使用都很正常,比如touch file1 file2 … mkdir file1 file2 同时写空多个文件…. 这些都行 , 直到有一天 我想grep 多个条件打印到屏幕,才发现 竟然不行 几经波折 整理出了 grep和egrep的方法!!!!
    以touch为例,正常情况如下:
    在这里插入图片描述
    grep错误的就不一一展示了。。。。 感兴趣的 可以先不看我下面列出的方法,自行尝试一下哦!!!!

    grep 和 grep –E(egrep)实现方法

    grep格式

    命令格式:grep ‘file1\|file2\|file3….’ # 注意有单引号
    如:[root@control test]$ls |grep 'test1\|test2\|test3\|test4'
    在这里插入图片描述

    egrep格式

    egrep和grep –E 是一样的功能 原因我就不做解释了!
    命令格式:grep –E ‘file1|file2|file3’ or egrep ‘file1|file2|file3’
    如:[root@control test]$ls | egrep 'test1|test2|test3|test4' [root@control test]$ls | grep -E 'test1|test2|test3|test4'

    在这里插入图片描述

    展开全文
  • java 多个线程同时写同一个文件

    千次阅读 2019-10-11 17:00:17
    话不说,先直接上代码: 主方法: import java.util.concurrent.CountDownLatch; /** * @ProjectName: emp_customer * @Package: PACKAGE_NAME * @ClassName: Test * @Author: Administrator * @...

    话不多说,先直接上代码:

    主方法:

    import java.util.concurrent.CountDownLatch;
    
    /**
     * @ProjectName: emp_customer
     * @Package: PACKAGE_NAME
     * @ClassName: Test
     * @Author: Administrator
     * @Description: ${description}
     * @Date: 2019/10/11 14:10
     * @Version: 1.0
     */
    public class Test {
         public static void main(String args[]){
    
             //线程数
             int threadSize=4;
             //源文件地址
             String sourcePath = "E:\\1\\4.txt";
             //目标文件地址
             String destnationPath = "E:\\2\\4.txt";
             //
             CountDownLatch latch = new CountDownLatch(threadSize);
             MultiDownloadFileThread m = new MultiDownloadFileThread(threadSize, sourcePath, destnationPath, latch);
             long startTime = System.currentTimeMillis();
             try {
                 m.excute();
                 latch.await();
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
             long endTime = System.currentTimeMillis();
             System.out.println("全部下载结束,共耗时" + (endTime - startTime) / 1000 + "s");
         }
    
    }
    

     

    线程类:

    import java.io.*;
    import java.nio.channels.FileChannel;
    import java.nio.channels.FileLock;
    import java.util.concurrent.CountDownLatch;
    
    /**
     * @ProjectName: emp_customer
     * @Package: PACKAGE_NAME
     * @ClassName: MultiDownloadFileThread
     * @Author: Administrator
     * @Description: ${description}
     * @Date: 2019/10/11 15:03
     * @Version: 1.0
     */
    public class MultiDownloadFileThread {
    
        private int threadCount;
        private String sourcePath;
        private String targetPath;
        private CountDownLatch latch;
    
        public MultiDownloadFileThread(int threadCount, String sourcePath, String targetPath, CountDownLatch latch) {
            this.threadCount = threadCount;
            this.sourcePath = sourcePath;
            this.targetPath = targetPath;
            this.latch = latch;
        }
    
        public void excute() {
            File file = new File(sourcePath);
            int fileLength = (int) file.length();
            //分割文件
            int blockSize = fileLength / threadCount;
            for (int i = 1; i <= threadCount; i++) {
                //第一个线程下载的开始位置
                int startIndex = (i - 1) * blockSize;
                int endIndex = startIndex + blockSize - 1;
                if (i == threadCount) {
                    //最后一个线程下载的长度稍微长一点
                    endIndex = fileLength;
                }
                System.out.println("线程" + i + "下载:" + startIndex + "字节~" + endIndex + "字节");
                new DownLoadThread(i, startIndex, endIndex).start();
            }
        }
    
    
        public class DownLoadThread extends Thread {
            private int i;
            private int startIndex;
            private int endIndex;
    
            public DownLoadThread(int i, int startIndex, int endIndex) {
                this.i = i;
                this.startIndex = startIndex;
                this.endIndex = endIndex;
            }
    
            @Override
            public void run() {
                File file = new File(sourcePath);
                FileInputStream in = null;
                RandomAccessFile raFile = null;
                FileChannel fcin = null;
                FileLock flin = null;
                try {
                    in = new FileInputStream(file);
                    in.skip(startIndex);
                    //给要写的文件加锁
                    raFile = new RandomAccessFile(targetPath, "rwd");
                    fcin =raFile.getChannel();
                    while(true){
                        try {
                            flin = fcin.tryLock();
                            break;
                        } catch (Exception e) {
                            System.out.println("有其他线程正在操作该文件,当前线程休眠1000毫秒,当前进入的线程为:"+i);
                            sleep(1000);
                        }
                    }
                    //随机写文件的时候从哪个位置开始写
                    raFile.seek(startIndex);
                    int len = 0;
                    byte[] arr = new byte[1024];
                    //获取文件片段长度
                    int segLength = endIndex - startIndex + 1;
                    while ((len = in.read(arr)) != -1) {
                        if (segLength > len) {
                            segLength = segLength - len;
                            raFile.write(arr, 0, len);
                        } else {
                            raFile.write(arr, 0, segLength);
                            break;
                        }
                    }
                    System.out.println("线程" + i + "下载完毕");
                    //计数值减一
                    latch.countDown();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException | InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (in != null) {
                            in.close();
                        }
                        if (raFile != null) {
                            raFile.close();
                        }
    
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    运行结果:

     

    涉及到的相关知识点:

    1.CountDownLatch 

    2.RandomAccessFile

    3.FileLock

    下面我们具体讲解下

    一、FileLock :文件锁

    FileLock是java 1.4 版本后出现的一个类,它可以通过对一个可写文件(w)加锁,保证同时只有一个进程可以拿到文件的锁,这个进程从而可以对文件做访问;而其它拿不到锁的进程要么选择被挂起等待,要么选择去做一些其它的事情, 这样的机制保证了众进程可以顺序访问该文件。

    1. 概念

    • 共享锁: 共享读操作,但只能一个写(读可以同时,但写不能)。共享锁防止其他正在运行的程序获得重复的独占锁,但是允许他们获得重复的共享锁。
    • 独占锁: 只有一个读或一个写(读和写都不能同时)。独占锁防止其他程序获得任何类型的锁。

    2. lock()和tryLock()的区别:

    lock()阻塞的方法,锁定范围可以随着文件的增大而增加。无参lock()默认为独占锁;有参lock(0L, Long.MAX_VALUE, true)为共享锁。
    tryLock()非阻塞,当未获得锁时,返回null.
    3. FileLock的生命周期:在调用FileLock.release(),或者Channel.close(),或者JVM关闭

    4. FileLock是线程安全的
     

    二、RandomAccessFile

    java除了File类之外,还提供了专门处理文件的类,即RandomAccessFile(随机访问文件)类。该类是Java语言中功能最为丰富的文件访问类,它提供了众多的文件访问方法。RandomAccessFile类支持“随机访问”方式,这里“随机”是指可以跳转到文件的任意位置处读写数据。在访问一个文件的时候,不必把文件从头读到尾,而是希望像访问一个数据库一样“随心所欲”地访问一个文件的某个部分,这时使用RandomAccessFile类就是最佳选择。

    RandomAccessFile对象类有个位置指示器,指向当前读写处的位置,当前读写n个字节后,文件指示器将指向这n个字节后面的下一个字节处。刚打开文件时,文件指示器指向文件的开头处,可以移动文件指示器到新的位置,随后的读写操作将从新的位置开始。RandomAccessFile类在数据等长记录格式文件的随机(相对顺序而言)读取时有很大的优势,但该类仅限于操作文件,不能访问其他的I/O设备,如网络、内存映像等。RandomAccessFile类的构造方法如下所示:

    RandomAccessFile(File file ,  String mode)
    //创建随机存储文件流,文件属性由参数File对象指定

    RandomAccessFile(String name ,  String mode)
    //创建随机存储文件流,文件名由参数name指定

    这两个构造方法均涉及到一个String类型的参数mode,它决定随机存储文件流的操作模式,其中mode值及对应的含义如下:

    “r”:以只读的方式打开,调用该对象的任何write(写)方法都会导致IOException异常
    “rw”:以读、写方式打开,支持文件的读取或写入。若文件不存在,则创建之。
    “rws”:以读、写方式打开,与“rw”不同的是,还要对文件内容的每次更新都同步更新到潜在的存储设备中去。这里的“s”表示synchronous(同步)的意思
    “rwd”:以读、写方式打开,与“rw”不同的是,还要对文件内容的每次更新都同步更新到潜在的存储设备中去。使用“rwd”模式仅要求将文件的内容更新到存储设备中,而使用“rws”模式除了更新文件的内容,还要更新文件的元数据(metadata),因此至少要求1次低级别的I/O操作

     

    三、CountDownLatch

    1.概念

    • countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。
    • 是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。

    2.源码

    • countDownLatch类中只提供了一个构造器:
    //参数count为计数值
    public CountDownLatch(int count) {  };  
    
    • 类中有三个方法是最重要的:
    //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行
    public void await() throws InterruptedException { };   
    //和await()类似,只不过等待一定的时间后count值还没变为0的话就会继续执行
    public boolean await(long timeout, TimeUnit unit) throws InterruptedException { };  
    //将count值减1
    public void countDown() { };  

    假如在我们的代码里面,我们把main方法里面的

    latch.await();

    注释掉

    如下所示:

    我们可以看到跟之前的输出结果相比,我们的主方法里面输出的:全部下载结束的输出信息,已经打印到我们执行文件下载的线程输出信息的前面了,说明主线程先执行完。这从而说明,await() 方法具有阻塞作用

     我们在把latch.await();放开,把文件下载线程里的latch.countDown();注释掉,

    如下:

    我们可以看到,主程序里的的输出;全部下载结束的输出信息,一直未输出,程序也一直未结束,由此可得,countDown() 方法具有唤醒阻塞线程的作用。

    那么如何让 CountdownLatch 尽早结束

    假如我们的程序执行到countDown()之前就抛出异常,这就可能导致一整情况,CountdownLatch 计数永远不会达到零并且 await() 永远不会终止。

    为了解决这个问题,我们在调用 await() 时添加一个超时参数。

     

    CountDownLatch总结:

        1、CountDownLatch end = new CountDownLatch(N); //构造对象时候 需要传入参数N

      2、end.await()  能够阻塞线程 直到调用N次end.countDown() 方法才释放线程,最好设置超时参数

      3、end.countDown() 可以在多个线程中调用  计算调用次数是所有线程调用次数的总和

     

    对于,本demo而言,加不加文件锁的意义不大,因为在进入线程写的时候,就已经告诉单个线程需要写的内容是哪一块到哪一块,不加锁,也会正常写入,切经本人测试无误,但若是对同一个文件,即要写,又要读话,就必须加锁,不然程序执行可能不完整,具体情况可以查看下面的这个博客:https://blog.csdn.net/gxy3509394/article/details/7435993

    展开全文
  • 多个无线路由器的文件打印共享

    千次阅读 2016-02-29 22:12:04
    多个无线路由器的文件打印共享,最简单的办法是不使用后级无线路由器的路由功能,仅把它当成带无线功能的交换机使用,由第一级的无线路由器负责所有的路由功能。

    多个无线路由器的文件及打印共享

     

            为了办公环境的无线网络全覆盖,一共使用了三台无线路由器,按常规的接法拓扑图如下:


            在这种无线网络环境下,所有接入的电脑和手机都可以正常上网使用,但是已共享的打印机只能为同一个路由器下的用户提供服务,而其他用户则无法访问和使用这些已共享的资源。

            在网上查阅对比了一下,要想解决这个问题,最简单的办法是不使用后级无线路由器的路由功能,仅把它当成带无线功能的交换机使用,由第一级的无线路由器负责所有的路由功能。修改后的拓扑图如下:

     

           具体设置如下:

    1、A路由器按常规的接法,WAN接入信号,LAN输出信号。

    设:LAN     地址为:  192.168.0.10

            DHCP 范围为:  192.168.0.100-192.168.0.200

            SSID   名称为: MySSID-1

             WiFi   口令为: 12345678

             WiFi   频道为: 自动

    2、修改B路由器的设置,停用其DHCP功能,修改LAN地址在A路由器网段内。

    设:LAN     地址为:  192.168.0.20

           SSID    名称为: MySSID-2(开头与A完全一样,后面加上数字以方便识别。)

           WiFi     口令为: 12345678(与上面的一样)

           WiFi     频道为: 自动

    3、从A路由器的LAN接根线到B路由器的LAN,这样就行了。

    4、C路由器参照B路由器的设置,只要LAN 地址不在A路由的DHCP范围内就行。(注意:除了A路由器,其他路由器都不用设置WAN口的参数。)

            按以上方法的设置,因为后级路由器没有使用路由功能,只当成交换机来使用,所有用户都在同一网段内。所以,在实现无线网络全覆盖的同时,可完美解决文件及打印共享的问题。与此同时,当用户在不同路由器之间漫游时,由于其IP地址是由A路由统一分配的,用户感知的只是信号强度有所变化而已。

     





    展开全文
  • 知识目录 &amp;amp;lt;?php $fp = fopen(&amp;quot;/tmp/lock.txt&amp;quot;, &amp;quot;w+&amp;quot;); if(flock($fp, LOCK_EX)){ // 进行排它型锁定 ... flock($fp, LOCK_U

    知识目录

    
    $fp = fopen("/tmp/lock.txt", "w+");
    if(flock($fp, LOCK_EX)){	// 进行排它型锁定
        fwrite($fp, "Write something here\n");
        flock($fp, LOCK_UN);	// 释放锁定
    }else{
        echo "Couldn't lock the file !";
    }
    fclose($fp);
    
    
    展开全文
  • winform 按顺序连续打印多个PDF文件

    千次阅读 2014-05-05 14:13:00
    原文:winform 按顺序连续打印多个PDF文件关于PDF打印的问题,前面有篇文章(点这里查看)也叙述过,今天来谈谈另外一种方法 其实方法很简单,因为需要把多个PDF文档按顺序连续打印,为此我们为什么不把要打印的pdf...
  • 这里只展示主要接收函数的python文件内容: from iot_core import make_api_respone from flask import request, redirect, url_for from werkzeug.utils import secure_filename import os from db_manager....
  • Java实现上传(支持多个文件同时上传)和下载

    万次阅读 多人点赞 2018-05-08 17:38:41
    文件上传一直是Web项目中必不可少的一项功能。项目结构如下:(这是我之前创建的SSM整合的框架项目,在这上面添加文件上传与下载)主要的是FileUploadController,doupload.jsp,up.jsp,springmvc.xml1.先编写up.jsp&...
  • cat-合并输出多个文件的内容

    千次阅读 2019-01-21 12:24:46
    cat 命令可以将文件内容输出在输出端,或者将多个文件合并输出到输出端。 语法 cat [OPTION]... [FILE]... 复制代码可使用的option值可以通过 man cat 命令查阅,这里不再赘述。 示例 假设你在当前目录下有两个文件a...
  • springboot同时加载多个配置文件

    千次阅读 2019-07-24 13:19:54
    1、首先在resource目录下建立application-logger.yml...在Spring Boot中环境配置文件名必须满足: application-{profile}.properties的固定格式, 其中{profile}对应你的环境标识 例如: application-dev.propert...
  • 到现在才发现,网页可以直接输出为pdf文档 软件准备:火狐浏览器FireFOX、AdobePDF ...将需要合并的多个文件放在一个统一的文件夹 打开AdobePDF软件——&amp;gt;点击左上角文件——&amp;...
  • awk 输出到多个文件 多路输出

    千次阅读 2016-06-24 15:17:51
    awk中经常需要根据不同条件,将内容输出到不同文件中。写了简单的awk小脚本,可以满足这需求。#!/bin/awk -f{ if(NR==FNR) {a[$0]++} else {if($1 in a) print $0 >> "user_agence" else print $0
  • 有读者问:那么如果有多个文件同时上传呢?这就马上奉上,当碰到多个文件同时上传的处理方法。 动手试试 本文的动手环节将基于Spring Boot中实现文件的上传一文的例子之上,所以读者可以拿上一篇的例子作为基础...
  • 多个PDF文件或PDF数据流的合并

    千次阅读 2020-04-16 18:50:25
    转换成PDF的二进制流返回),主要是为了方便开发和维护,对应单个的打印文件的预览都没有问题,后期提出新需求,需要勾选多个预览文件时,在一个弹框里面看到所有的pdf文件,就是一个接着一个的长pdf。 特别说明:...
  • 教你快速批量打印多个文档的方法

    千次阅读 2010-05-25 21:48:26
    打印文件是办公室中最常见的应用之一,但是如果需要打印多个文件,我们的工作就会显得异常繁琐。面对大量的打印工作,如何能够化繁为简呢?推荐把您的打印工作交给它——“Word文档批量打印工具”。 虽然它的名称里...
  • Spring文件上传,包括一次选中多个文件

    万次阅读 多人点赞 2017-05-27 09:14:45
    Spring文件上传代码示例, 包括一次选中多个文件, 前端与后端代码处理
  • 首先需要下载两apache上传文件的jar包 commons-fileupload-1.3.1.jar commons-io-2.4.jar 具体使用版本,请根据项目进行选择。 2.配置MultipartResolver处理文件 SpringMVC 用的是 的MultipartFile来...
  • 1、下载单个文件 public JsonView downPrintFile(){ //要下载的文件名 从前台传来 String fileNameNeedDown = request.getParameter("fileName"); //这里的路径是要下载的文件所在路径 String ...
  • 需求是有多个excel文件,里面每张表的字段是一致的,但是表的顺序可能会变化。需要把多个excel合并成一个。 使用python2,openpyxl模块,只能合并xlsx格式的文件。 # -*- coding: utf-8 -*- """ File Name: insert_...
  • 转:http://blog.sina.com.cn/s/blog_8417657f0101lskw.htmllog4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况,...1)先看一常见的log4j.properties文件,它是在控制台和daily
  • //表单: //s.php 无标题文档 //函数的封装: //ss.php header('Content-Type:text/html;...//构建上传文件信息 function getFiles(){ $i=0; foreach($_FILES as $fi
  • 当一个文件夹下面有600个txt数据文件,每个txt文件里都是第一行是变量名,从第2行开始是数据,大概100行左右,共23列,想要把这600个文件里的数据都导入到pycharm中,不知道只用array还是dataframe比较合适呢?...
  • tail -f 查看多个日志文件

    万次阅读 2018-09-16 14:39:40
    查看log时,,会有过个文件用来输出log,但是太分散,查看很不方便,可以查看全部的log   tail -f *.log **.log 只能用tail -f 而不是 tailf  ...可以将多个文件中的log打印出来   ...
  • linux两个文件交集,合并,去重

    万次阅读 2018-09-05 16:25:54
    1.两个文件的交集,并集 cat file1 file2 | sort | uniq &gt; result cat file1 file2 | sort | uniq -d &gt; result cat file1 file2 | sort | uniq -u &gt; result 第一条命名求两个文件的并集,...
  • Visio如何合并多张工作表(将多个文件合并成一个文件)今天有个盆友问了我这样一个问题:手上有3张Visio文件,分别是3张流程图。他想将3个文件做成像excel表那样,有工作表1,工作表2,工作表3的样式。图片效果如下...
  • 原理图文件如果用A4大小的话放不下,只能用A0,但是这样的话,如果用A4纸打印出来可能就会比较小了,为了便于打印观看原理图文件,想把原来单个原理图文件中的元件分成多个A4大小的原理图文件”,原文如下: ...
  • 采用C语言, 线程 对同一个文件进行写操作; * 2.每个线程有自己的写入位置; * 3.每个线程有自己的数据缓冲区; * 4.写文件前, 会 加锁(全局变量), 然后 将文件句柄 跳跃到指定位置, 写下线程缓冲区的数据;...
  • 大家应该都知道,C语言定义的变量的作用范围是从定义的位置起,到特定... 那么,进入正题了,C语言所谓的全局变量在多个.c文件中到底该怎样使用? 首先说一下全局变量的特性: 全局变量可以定义在一个.c文件中,...
  • 当我们想一次运行多个py脚本的时候你想到了什么应用场景了吗?当你想同时并行的处理一些对象时你有什么好方法吗?下面我就简单的总结一些这方面的小技巧,方便大家根据情况灵活处理。 1 用一个py脚本运行多个py脚本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 475,097
精华内容 190,038
关键字:

多个文件一起打印