该程序主要实现样条插值的目的,为本地执行java文件

该程序包含:样条插值法、读取文件,写入文件,字符型转double型方法等;

适合初学Java的人学习;

首次使用eclipse打jar包,中间很曲折,结果很nice,我把步骤分享下~

该jar包可在本地执行;

1.将你要实现的功能写成通用的格式,最好是输入和输出都以文件的形式;

2.程序写好后,开始打jar包,打jar包步骤

File>export>Runable JAR file>选择你的主类和输出地址>点击完成后会有警告弹出,不用管,继续点击确定就好了;

export

注意点

警告

3.jar包完成后,检查jar包大小,可以右击该jar包,查看jar包大小,如果是2MB左右大小,说明jar包大小没问题,如果是几KB的话,可能jar包就有问题。

成功后的jar包大小

4.jar包完成后,就可以测试了,可以在cmd中测试,也可以在Linux中测试。这两种方法我都试下~

5.cmd测试:

切换到jar包所在位置,执行jar包

java -jar SplineInterpolatorImpl.jar C:\Users\91911\Desktop\test.txt  C:\Users\91911\Desktop\result.txt

解释:java -jar jar包名称 输入文件 输出结果

6.在Linux中测试

将jar包和输入文件上传到接口机,执行jar包:

java -jar SplineInterpolatorImpl.jar test.txt result.txt

解释:java -jar jar包名称 输入文件 输出文件

完整代码如下:

样条插值法:

 import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.math3.analysis.interpolation.SplineInterpolator;
import org.apache.commons.math3.analysis.polynomials.PolynomialSplineFunction; /**
* 样条插值法
* @author 91911
*/
public class SplineInterpolatorImpl {
public static void main(String[] args){
// String[] source = new String[]{
// "0,1,2,3 0,1,1,0 2.5",
// "0,1,2,3 0,1,1,0 1.5"
// };
// 判断传入参数的长度,必须输入两个参数(输入文件和输出文件),否则报错
if (args.length != 2) {
System.out.println("请输入原文件和输出文件的路径!!");
System.exit(0);
}
SplineInterpolatorImpl splineInterpolatorImpl = new SplineInterpolatorImpl();
List<String> source = splineInterpolatorImpl.getFileContent(args[0]);
File file = new File(args[1]);
// List<String> source = splineInterpolatorImpl.getFileContent("C:/Users/91911/Desktop/test.txt");
// File file = new File("C:/Users/91911/Desktop/result.txt");
for(String s1:source) {
String splited[] = s1.split("\t");
double[] x = splineInterpolatorImpl.String2Double(splited[0]);
double[] y = splineInterpolatorImpl.String2Double(splited[1]);
double z = Double.parseDouble(splited[2]);
double result = splineInterpolatorImpl.caculate(x, y, z);
exportFile(s1+"\t"+result,file);
// System.out.println(splineInterpolatorImpl.caculate(x, y, z));
}
} // 读取配置文档
public static List<String> getFileContent(String filepath) {
List<String> list = new ArrayList<>();
BufferedReader br;
String rec;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filepath)), "GBK"));
while ((rec = br.readLine()) != null) {
if (StringUtils.isNotEmpty(rec.trim())) {
list.add(rec);
}
}
br.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
System.out.println("转码出错!");
e.printStackTrace();
return null;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("未找到配置文件 " + filepath + " ,请检查该路径是否正确!");
e.printStackTrace();
return null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
return list;
} //写文件
public static void exportFile(String content,File file){
try {
FileWriter out = new FileWriter(file,true);
out.write(content + "\r\n");
out.flush();
out.close();
}catch (IOException e){
System.out.println("!IO异常,写文件异常");
}
}
//样条计算法
public double caculate(double[] x,double[] y, double z){
SplineInterpolator sp = new SplineInterpolator();
PolynomialSplineFunction f = sp.interpolate(x, y);
return f.value(z);
} //将字符型转换为double型
public static double[] String2Double(String str) {
double[] d = { 1 };
if (str.contains(",")) {
String[] arr = str.split(",");
d = new double[arr.length];
for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]);
d[i] = Double.valueOf(arr[i].trim());
}
}
return d;
}
}

样条插值法(Java)--在本地执行的更多相关文章

  1. Java JDBC下执行SQL的不同方式、参数化预编译防御

    相关学习资料 http://zh.wikipedia.org/wiki/Java数据库连接 http://lavasoft.blog.51cto.com/62575/20588 http://blog ...

  2. 怎么优化JAVA程序的执行效率和性能?

    现在java程序已经够快的了,不过有时写出了的程序效率就不怎么样,很多细节值得我们注意,比如使用StringBuffer或者StringBuilder来拼接或者操作字符串就比直接使用String效率高 ...

  3. Android使用JNI(从java调用本地函数)

    当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本 ...

  4. JAVA 文件编译执行与虚拟机(JVM)简单介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...

  5. “Java是编译执行的语言”这句话对吗?

    现在让你谈谈对Java平台的理解,你是否会感觉内容过于庞大?这个问题是比较宽泛的,Java发展到现在已经不仅仅是语言这么简单了,Java平台涉及的,包括但不仅限于下面提到的这些内容: Java语言本身 ...

  6. java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)

    java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...

  7. [转载]java调用本地dos命令

    在社区看到java调用本地dos命令的代码,特贴出来 String command = "ipconfig"; Runtime run = Runtime.getRuntime() ...

  8. Java调用本地方法又是怎么一回事

    JNI JNI即Java Native Interface,它能在Java层实现对本地方法的调用,一般本地的实现语言主要是C/C++,其实从虚拟机层面来看JNI挺好理解,JVM主要使用C/C++ 和少 ...

  9. 1.对Java平台的理解。“Java是解释执行”对吗

    Java本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”,能够非常容易地获得跨平台能力: 另外就是垃圾收集(GC),Java通过垃圾收集器(Garbage Colle ...

随机推荐

  1. 面试必备的10道MySQL题

    MySQL 事务,是我们去面试中高级开发经常会被问到的问题,很多人虽然经常使用 MySQL,SQL 语句也写得很溜,但是面试的时候,被问到这些问题,总是不知从何说起.下面我们先来了解一下什么是 MyS ...

  2. 腾讯的网站如何检测到你的 QQ 已经登录?

    转:http://www.lovelucy.info/tencent-sso.html 在 QQ 已经登录的情况下,手动输入网址打开 QQ 邮箱 或者 QQ 空间 等腾讯网站,可以看到网页已经检测到本 ...

  3. C++ 读取 MATLAB 的 .m 文件,并发送到 MATLAB 运行

    本代码是由「Microsoft Visual Studio 2015 Enterprise」编写. 想要了解更多 C++ 与 MATLAB 混合编程的知识,可以参考我的另一篇博客:C++ 与 MATL ...

  4. Linux进程的五个段

    目录 数据段 代码段 BSS段 堆(heap) 栈 数据段 用来存放可执行文件中已初始化的全局变量,换句话说就是存放程序静态分配的变量和全局变量: 代码段 代码段是用来存放可执行文件的操作指令,也就是 ...

  5. SpringCloud之Hystrix集群及集群监控turbine

    目的: Hystrix集群及监控turbine Feign.Hystrix整合之服务熔断服务降级彻底解耦 集群后超时设置 Hystrix集群及监控turbine 新建一个springboot工程mic ...

  6. k8s yaml格式的pod定义文件完整内容

    apiVersion: v1 #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到 . kind: Pod #必选,Pod metadata: #必选,元数据 ...

  7. AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersion 区别

    AssemblyVersion: 几乎保留在.NET内部,AssemblyFileVersion: 就是Windows所见.如果您转到位于目录中的程序集的属性并切换到版本选项卡, 映射到“文件版本”A ...

  8. 缺陷的背后(四)---多进程之for循环下fork子进程引发bug

    导语 业务模块为实现高并发时的更快的处理速度,经常会采用多进程的方式去处理业务.多进程模式下常见的三种bug:for循环下fork子进程导致产生无数孙子进程,僵尸进程,接口窜包.本章主要介绍第一种常见 ...

  9. 系統启动直接进BIOS

  10. .net core使用ocelot---第三篇 日志记录

    简介 .net core使用ocelot---第一篇 简单使用 .net core使用ocelot---第二篇 身份验证使用 上篇介绍使用asp.net core 创建API网关.本文将介绍Ocelo ...