java向python ,text文件动态传参或传值问题完美解决

由于业务需要对python文件进行参数传递,通过下面两个java方法完美解决此问题,我的思路是:首先我要先把上次写的参数删除,第二我要新的参数写到python文件中。

第一个方法解决了删除上次传递的参数问题。

第二个方法解决了参数传递到python文件

  

    /**
     * @param file python文件的路径
     * @return
     * @throws IOException
     */
    private List<String> readAndRemoveFirstLines(File file) throws IOException{     //删除第一行内容
        int lineNum=1;
        List<String> strList = new ArrayList<String>();
        RandomAccessFile raf = null;
        try {
            raf = new RandomAccessFile(file, "rw");
            //Initial write position
            long writePosition = raf.getFilePointer();
            for (int i = 0; i < lineNum; i++) {
                String line = raf.readLine();
                if (line == null) {
                    break;
                }
                strList.add(line);
            }

            // Shift the next lines upwards.
            long readPosition = raf.getFilePointer();
            byte[] buff = new byte[1024];
            int n;
            while (-1 != (n = raf.read(buff))) {
                raf.seek(writePosition);
                raf.write(buff, 0, n);
                readPosition += n;
                writePosition += n;
                raf.seek(readPosition);

            }
            raf.setLength(writePosition);

        } catch(IOException e){
            throw e;
        } finally{
            try{
                if(raf != null){
                    raf.close();
                }
            }catch(IOException e){
                throw e;
            }
        }
        return strList;
    }
    /**
     * @param filePath  python文件的路径
     * @param contents  传入python文件的变量,仅数值即可
     * @throws IOException
     */
    public void addContainsToFile(String filePath, String contents) throws IOException {
        //1、参数校验
        int position =0;
        File file = new File(filePath);
        //定义python文件写入的内容
        String content="dis = " + contents + " Meters"+"\n";
        //判断文件是否存在
        if (!(file.exists() && file.isFile())) {
            System.out.println("文件不存在  ~ ");
            return;
        }
        //判断position是否合法
        if ((position < 0) || (position > file.length())) {
            System.out.println("position不合法 ~ ");
            return;
        }
        //2、创建临时文件
        File tempFile = File.createTempFile("sss", ".temp", new File("D:/"));
        //3、用文件输入流、文件输出流对文件进行操作
        FileOutputStream outputStream = new FileOutputStream(tempFile);
        FileInputStream inputStream = new FileInputStream(tempFile);
        //在退出JVM退出时自动删除
        tempFile.deleteOnExit();
        //4、创建RandomAccessFile流
        RandomAccessFile rw = new RandomAccessFile(file, "rw");
        //文件指定位置到 position
        rw.seek(position);
        int tmp;
        //5、将position位置后的内容写入临时文件
        while ((tmp = rw.read()) != -1) {
            outputStream.write(tmp);
        }
        //6、将追加内容 contents 写入 position 位置
        rw.seek(position);
        rw.write(content.getBytes());
        //7、将临时文件写回文件,并将创建的流关闭
        while ((tmp = inputStream.read()) != -1) {
            rw.write(tmp);
        }
        rw.close();
        outputStream.close();
        inputStream.close();
    }

测试方法我用的Junit进行测试:

  @Test
    public  void  testAddLine() throws IOException {
        try {
            //重点注意:1.以下三个方法的执行顺序不能改变;2.python文件文件的首行必须添加默认参数dis的数值;3.文件路径填写正确

            //此方法用来移除python文件中首行内容,在python文件的首行必须添加默认参数dis的数值,如:dis = 200 +‘meter‘
            readAndRemoveFirstLines(new File("E:\\demo\\pointbufferandpolygon.py"));//此方法用来给python文件首行添加dis的变量值,注意:变量名在此方法中已写死,如需修改变量名,参考此方法
            addContainsToFile("E:\\demo\\pointbufferandpolygon.py", "90000");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

效果图:

如果要传递多个参数呢?我这里已经实现了,也是通过以上代码进行了一次封装,如果需要可以留言进行探讨。

原文地址:https://www.cnblogs.com/chen-ya-ping/p/10939412.html

时间: 2024-11-12 13:11:29

java向python ,text文件动态传参或传值问题完美解决的相关文章

python函数的动态传参.作用域与命名空间

一.动态传参1.*表示动态传参. 可以接受所有的位置参数传参的时候自动的把实参打包成元组 交给形参 def chi(*food): print(food) chi() # 动态传参可以不传参数 chi(good_food = "胡辣汤") # 关键字传参 chi("胡辣汤", "疙瘩汤", "西红柿鸡蛋汤") chi("大猪蹄子","大汉堡","薯条","圣

python中给函数传参是传值还是传引用

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-

python(动态传参、命名空间、函数嵌套、global和nonlocal关键字)

一.函数的动态传参 1.*args位置参数动态传参 def chi(*food): print(food) chi("烧烤","火锅","虾吃虾涮","烤鱼") 多个位置参数传递进去,收到的内容是元组tuple,动态参数的位置必须要在位置参数后面 2**kwargs 关键字参数动态传参 def chi(**food): print(food) chi(zhangqing="吃点好的",lianda=&quo

python 动态传参,名称空间和作用域,函数的嵌套,global和nonlocal

一.动态传参 1.位置参数动态传参 def func(*args):    *表示动态传参 * 在这里表示接受位置参数的动态传参,接收到的是元组. def fun(*args): print(args) fun('aaa',3,5,6,'ccc') # 结果('aaa', 3, 5, 6, 'ccc') 2.关键字的动态传参 def func(**kwargs): 函数体(代码块) func(n=7,m="aa"): **表示接收关键字参数的动态传参,接收到的是字典. def fun(

uploadify的用法与动态传参 提供demo下载

---恢复内容开始--- 官网:http://www.uploadify.com/   一款不错的上传插件.官方文档http://www.uploadify.com/documentation/ 用法网上很多.今天快乐我在项目中想动态的穿选择,然后上传,同时服务器端,接受到参数与图片的地址.可是uploadify,直接是获取到,页面才加载的值.所以搜了一下.找到的办法.但都是旧版本的.今天我来写个新3.21版本. 要点     1.关闭自动上传.红色地方 $('#upload').uploadi

函数的第二节课,动态传参,动态关键字参数,作用域,关键字global和nonlocal

今日内容总结: 一.函数参数--动态传参 动态参数必须是在位置参数后面,比如:def chi(a,b,*food): print("我要吃",a,b,food)chi("大米饭","小米饭","黄瓜","西红柿") 默认值参数必须是在最后位置,比如:def chi(a,b,*food,c="馒头"): print(a,b,food,c)chi("香蕉", "

动态传参(*args **kwargs 无敌传参) 作用域globals locals和名称空间 函数的嵌套 关键字nonlcas global

动态传参(重点) *, ***, ** :形参: 聚合 位置参数* -> 元组 关键字** -> 字典 实参: 打散 列表, 字符串, 元素 -> * 字典 -> ** 形参的顺序(重点): 位置 *args(位置参数动态传参) 默认值 **kwargs(关键字动态传参)以后写参数. 可以随意的进行搭配, 但是, 顺序不能串 * 在形参位置. * 表示不定参数-接收的是位置参数接收到的位置参数的动态传参: 都是元组def chi(*food): # 在形参这里把传递过来的实参进行了

10 函数进阶 动态传参 作用域和名称空间 函数的嵌套 全局变量

今日主要内容 1. 动态传参(重点) *, ** *, ** : 形参: 聚合 位置参数* -> 元组 关键字** -> 字典 实参: 打散 列表, 字符串, 元素 -> * 字典 -> ** 形参顺序(重点): 位置, *args, 默认值, **kwargs 无敌传参 def func(*args, **kwargs): arguments参数 keyword-arguments关键字参数 pass 2. 作用域和名称空间 名称空间: 用来存放名字(变量, 函数名, 类名, 引

Python Selenium 文件上传(二)

今天补充一种文件上传的方法 主要是因为工作中使用SendKeys方法不稳定,具体方法见: Python Selenium 文件上传(一) 这种方法直接通过命令行执行脚本时没有问题,可以成功上传,但是如果通过saltstack 远程控制执行时,SendKeys就定位不到窗口了. 所以采用这种新的方式来实现文件上传功能,并完美的解决了这个问题. 具体操作步骤如下: 1.下载工具 AutoIt及使用 AutoIt目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows