精华内容
下载资源
问答
  • public static void main(String[] args) { String osName = System.getProperty("os.name"); System.out.println(osName); if (osName.startsWith("Mac OS")) { // 苹果 } else if (osName.startsWith(...
  • Java 文件操作基础之流操作

    千次阅读 2015-04-21 13:14:24
    Java编程语言中,想对文件进行操作,必须先对其封装的流操作类型有一定的了解。 对于计算机中的文件和目录,Java封装了一个File类。此类中定义了一些对文件及目录操作的常用方法,说明如下: 如果想不使用流方式...

    Java编程语言中,想对文件进行操作,必须先对其封装的流操作类型有一定的了解。

    对于计算机中的文件和目录,Java封装了一个File类。此类中定义了一些对文件及目录操作的常用方法


    如果想不使用流方式操作文件,需要用到Java中定义的RandomAccessFile类。此类中定义了许多读写方法用于操作文件,如readInt, readLong, readShort, readDouble, readFloat, readBoolean, readChar, readLine;writeInt, writeLong, writeShort, writeDouble, writeFloat, writeBoolean writeChar, writeLine等。并可以使用seek方法移动指针,从文件任意位置进行读写操作。

    对于文件的流操作,Java则提供了相对比较丰富的类。

    InputStream,所有输入流类的祖先类,其子类有FileInputStream和FilterInputStream,而FilterInputStream下又有子类DataInputStream和BufferedInputStream.

    OutStream,所有输出流类的祖先类,其子类有FileOutputStream和FilterOutputStream,而FilterOutputStream下又有子类DataOutputStream和BufferedOutputStream.

    FileXXXXStream是以二进制方式对文件数据进行读写操作,使用read或write方法每次读取或写入一个或多个字节;

    DataXXXXStream是对FileXXXXStream的一个装饰类,可以使用readInt(writeInt), readChar(writeChar), readBoolean(writeBoolean)等方法直接读取或写入数字、字符、布尔等类型数据;

    BufferedXXXXStream亦是对FileXXXXStream的一个装饰类,其作用为可以使用缓冲区对流数据进行读取和写入操作。如果将FileXXXXStream类对数据的读取或写入比做是一瓢一瓢的将水接入大水桶,那么BufferedXXXXStream则是先将水接到一个小水桶中,然后再倒入存水的大水桶中。

    下面举例说明这些类的使用方法。


    	public static void getFileInfo(String fileName) throws IOException {
    		File f = new File(fileName);
    		System.out.println("File Information [" + fileName + "]");
    		System.out.println("Executable: " + f.canExecute());
    		System.out.println("Writeable: " + f.canWrite());
    		System.out.println("Readable: " + f.canRead());
    		System.out.println("Path: " + f.getPath());
    		System.out.println("Absolute Paht: " + f.getAbsolutePath());
    		System.out.println("Canonical Path: " + f.getCanonicalPath());
    		System.out.println("Parten: " + f.getParent());
    		System.out.println("Last modified: " + f.lastModified());
    		System.out.println("Path: " + f.toPath());
    		System.out.println("URI: " + f.toURI());
    		System.out.println("=======================================");
    	}
    	//读取文本文件内容
    	public static void readFile(String fileName) throws IOException {
    		//FileInputStream in = new FileInputStream(fileName);
    		FileReader fr = new FileReader(fileName);
    		int b;
    		while ((b = fr.read()) != -1) {
    			System.out.print((char)b);
    		}
    		fr.close();
    	}

    public void copyFile(File srcFile, File destFile) {
        if (!srcFile.exists()) {
            //源文件不存在
           throw new Exception("源文件" + srcFile + "不存在");
        }
        if (!srcFile.isFile()) {
            //源文件不是文件,可是是目录或其他
            throw new Exception("源文件" + srcFile + "不是文件");
        }
    
        FileInputStream in = new FileInputStream(srcFile);
        FileOutputStream out = new FileOutputStream(destFile);
        InputStreamReader isr = new InputStreamReader(in);
        int b = 0;
        byte[] buf = new byte[8 * 1024];
        while ((b = irs.read(buf, 0, buf.length)) != -1) {
            out.write(buf, 0, b);
        }
        in.close();
        out.close();
    }




    展开全文
  • java线程操作

    千次阅读 2008-05-18 13:27:00
    java里实现线程主要有两种方式,一种是继承Thread类(位于默认的java.lang包内),一种是实现Runnadle接口,其中Thread类是通过Runnable实现。方式一: class TestThread extends Thread{ //成员变量(私有) //构造...

    java里实现线程主要有两种方式,一种是继承Thread类(位于默认的java.lang包内),一种是实现Runnadle接口,其中Thread类亦是通过Runnable实现。

    方式一:    

     class TestThread extends Thread{      

     //成员变量(私有)    

     //构造函数(共有,无返回值)    

      public void run()     {     

      //线程执行体     

        }

    }

    调用部分:

     TestThread thread1=new TestThread();

    //用线程对象的start()方法启动线程

    thread1.start();

    方式二:

    class TestThread implements Runnable{   

      //成员变量  

      //构造函数  

     public void run(){   

     //线程执行体

    }

    }

    调用部分:

    TestThread thread2=new TestThread();

    //用线程基类Thread的构造方法构造线程,名称为Threadone

    new Thread(thread2,"Threadone").start();

    展开全文
  • TIP:这是一个很危险的类,不熟悉情况下别用于生产环境我们...一直以来,JAVA在大多数人心目中没有办法对内存进行操作的,其实不然,Unsafe类就是一把操作JAVA内存的钥匙。//不可以直接被初始化 private Unsafe() {}

    TIP:这是一个很危险的类,不熟悉情况下别用于生产环境

    如果大家熟悉java concurrent,相信对Unsafe类不陌生。

    我们知道JAVA作为高级语言的重要创新一点就是在于JVM的内存管理功能,这完全区别于C语言开发过程中需要对变量的内存分配小心控制,JVM很大程度解放了码农对于内存的调整。一直以来,JAVA在大多数人心目中没有办法对内存进行操作的,其实不然,Unsafe类就是一把操作JAVA内存的钥匙。

    //不可以直接被初始化
    private Unsafe() {}
    
    //可以通过get获得实例
    public static Unsafe getUnsafe() {
             Class<?> caller = Reflection.getCallerClass();
              if (!VM.isSystemDomainLoader(caller.getClassLoader()))
                 throw new SecurityException("Unsafe");
             return theUnsafe;
         }

    在这里需要注意isSystemDomainLoader,若不设置为static final将会导致SecurityException异常

    这里简单介绍几个方法:

    1 类值域初始化
    推荐先看一下Class初始化理解
    一般类实例化的方式主要有:1.new;2.Reflect;3.ClassLoader,不同方式对应不同初始化方式

        //Unsafe提供获取实例地址
        public native Object allocateInstance(Class<?> cls)
            throws InstantiationException;
        //直接根据内存地址获取byte,Unsafe还提供了Int,Long等基本类型
        //的线程安全及非线程安全取值
        public native byte  getByte(long address);
    
        //同样提供了对内存数据的直接修改,并提供基本类型的线程安全及非安全
        //赋值
        public native void  putByte(long address,byte x);

    2 克隆
    克隆之前经常用到两种方式:1.浅度克隆;2.深度克隆
    浅度克隆实现的主要方式是clonable接口的clone方法以及通过反射获取clone对象。
    深度克隆一般就比较麻烦了,需要自定义深度克隆方法。
    现在我们可以操控内存,不论深度克隆亦或者浅度克隆,都只是对内存对象的操作,通过内存控制,我们很容易实现对象克隆。

    //熟悉的内存分配
    public native long allocateMemory(long bytes);
    //熟悉的内存释放
    public native void freeMemory(long address);
    //内存复制,C的感觉回来了吧,浅度克隆一句搞定
    //深度克隆需要考虑克隆程度,因此推荐使用WakeObject,利用反射进行克隆
    public void copyMemory(long srcAddress, long destAddress, long bytes) {
    560         copyMemory(null, srcAddress, null, destAddress, bytes);
    561     }

    3.懒加载
    经常并发的数据结构中低级别的优化。

    //常并发控制中,简称CAS(Compare And Swap),意思是如果valueOffset
    //位置包含的值与expect值相同,则更新valueOffset位置的值为update,
    //并返回true,否则不更新,返回false
    public final native boolean compareAndSwapInt(Object o, long offset, int expected, int x);
    
    //懒加载
    public native void putOrderedInt(Object o, long offset, int x);

    推荐看一下这篇,写的真心太好,觉得不需要再赘述JUC中Atomic class之lazySet的一点疑惑

    Unsafe做操作的是直接内存区,所以该类没有办法通过HotSpot的GC进行回收,需要进行手动回收,因此在使用此类时需要注意内存泄漏(Memory Leak)和内存溢出(Out Of Memory)

    展开全文
  • java操作postgress的copy In入库操作

    千次阅读 2019-10-11 11:01:01
    我们使用的数据库是...但是GP在入库操作的使用是相当慢的,可能我没有使用到对的方法吧....batchSave,JPA的save(List)方法都无济于事,或者是使用jdbctemplate执行batchUpdate都感觉是挺慢的... 后来发现p...

    我们使用的数据库是Greeplum(GP),也就是基于PostGress开发的分布式数据库,至于为什么是分布式的,我也不知道,毕竟要学的东西很多.....

     

    但是GP在入库操作的使用是相当慢的,可能我没有使用到对的方法吧....batchSave,JPA的save(List)方法都无济于事,亦或者是使用jdbctemplate执行batchUpdate都感觉是挺慢的...

     

    后来发现pg在入库的时候可以使用copyIn进行流式的数据入库,简单的sql语句就是;

    COPY table_name(field1,field2,field3.....) FROM STDIN DELIMITER AS ,此时流式的数据字段要保证字段值对应就好了.....

    在使用的使用,就是配置pg的数据库参数和驱动,然后直接执行,这里简短的记录一下...

     

     

     

    数据库属性配置项

    pg:
        url: jdbc:postgresql://192.168.1.122:5432/test
        user: gpadmin
        password: gpadmin
        driver: org.postgresql.Driver //pg的驱动

     

    数据库配置及

    	
    	package com.trs.idap.repository.postgresql;
    
    import com.trs.idap.config.zlconfig.ConnectPoolConfiguration;
    import com.trs.idap.utils.CommonUtils;
    import org.postgresql.copy.CopyManager;
    import org.postgresql.core.BaseConnection;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Repository;
    
    import javax.annotation.PostConstruct;
    import java.io.ByteArrayInputStream;
    import java.io.InputStream;
    import java.nio.charset.StandardCharsets;
    import java.sql.Connection;
    import java.util.List;
    
    /**
     * Created by Young on 2019/10/11
     * 描述: pg copyIn 批量操作入库GP
     *
     * @author Young
     * @create 14:11 2019/10/11
     */
    @Repository
    public class PostgresqlRepository {
        protected final Logger log = LoggerFactory.getLogger(this.getClass());
        @Value("${pg.url}")
        private String url;
        @Value("${pg.user}")
        private String user;
        @Value("${pg.password}")
        private String password;
        @Value("${pg.driver}")
        private String driver;
    
        private ConnectPoolConfiguration poolConfiguration = null;
    
        @PostConstruct
        void init() {
            log.info("init PGConnectPool.");
            poolConfiguration = ConnectPoolConfiguration.getConPoolConfiguration(driver, url, user, password);
        }
    
        /**
         * @param list      入库的数据集
         * @param tableName 入库的表名及对应的字段顺序.示例:idap_potential_crime (name,field) ,根据字段来的
         * @return long 入库的数量值
         * @author Young
         * @description PG批量入库操作
         * @date 14:49 2019/10/11
         **/
        public long copyIn(List<String> list, String tableName) {
            long startTime = System.currentTimeMillis();
            long affectedRowCount = 0;
            Connection conn = null;
            try {
                //获得连接
                conn = poolConfiguration.getConnection();
                CopyManager copyManager = new CopyManager((BaseConnection) conn);
                String copyIn = "COPY " + tableName + " FROM STDIN DELIMITER AS ','";
                affectedRowCount = copyManager.copyIn(copyIn, genInputStream(list));
            } catch (Exception e) {
                log.error("Failed to copy data SQLException: " + e.getMessage());
            } finally {
                //放回连接
                poolConfiguration.returnConnection(conn);
            }
            log.info("copy completed  " + CommonUtils.execTime(startTime) + " seconds, affectedRowCount " + affectedRowCount);
            return affectedRowCount;
        }
    
    
        /**
         * @param list 入库数据String集合
         * @return java.io.InputStream
         * @author Young
         * @description List转化为流式数据, 进行入库操作;
         * @date 14:22 2019/10/11
         **/
        private InputStream genInputStream(List<String> list) {
            StringBuilder sb = new StringBuilder();
            for (String data : list) {
                sb.append(data + "\r\n");
            }
            return new ByteArrayInputStream(sb.toString().getBytes(StandardCharsets.UTF_8));
        }
    
        // 每隔一小时做一次释放  暂不使用-Young 1011
    //    @Scheduled(cron = "0 */1 * * * *")
    //    void freeUnUseConn() {
    //        poolConfiguration.freeUnUseConnections();
    //    }
    
    }

    //todo  获取连接的方式后续补充

     

    封装数据库表及字段

        /**
         * @param
         * @return java.lang.String
         * @author Young
         * @description 封装入库的表名及字段名称:顺序一定要对
         * @date 15:23 2019/10/11
         **/
        private String getTableAndFields() {
            // 封装表名和库名
            //AppearTime,IdValue,MatchAppearTime,MatchBkgUrl,MatchImageUrl,MatchType,MatchValue,SiteAddress,PersonId,image_url,bkg_url,IdType
            StringBuffer sb = new StringBuffer();
            sb.append(GP_TABLE_POTENTIAL_CRIME)
                .append(" ( ")
                .append("appear_time").append(",")
                .append("id_value").append(",")
                .append("match_appear_time").append(",")
                .append("match_bkg_url").append(",")
                .append("match_image_url").append(",")
                .append("match_type").append(",")
                .append("match_value").append(",")
                .append("site_address").append(",")
                .append("person_id").append(",")
                .append("image_url").append(",")
                .append("bkg_url").append(",")
                .append("id_type")
                .append(" ) ");
            return sb.toString();
        }
    	    /**
         * @param allIdTypeValueEntity 入参描述说明
         * @param taskAlarmEntity      入参描述说明
         * @return java.lang.String
         * @author Young
         * @description 描述方法的功能说明
         * @date 10:17 2019/10/14
         **/
        public String getDetectDataStr(IdapAllIdTypeValueEntity allIdTypeValueEntity, IdapTaskAlarmEntity taskAlarmEntity) {
            StringBuffer sb = new StringBuffer();
            sb.append(allIdTypeValueEntity.getStartTime()).append(",")
                .append(allIdTypeValueEntity.getIdValue()).append(",")
                .append(taskAlarmEntity.getAppearTime()).append(",")
                .append(taskAlarmEntity.getBkgUrl()).append(",")
                .append(taskAlarmEntity.getImageUrl()).append(",")
                .append(taskAlarmEntity.getIdType()).append(",")
                .append(taskAlarmEntity.getIdValue()).append(",")
                .append(taskAlarmEntity.getSiteAddress()).append(",")
                .append(taskAlarmEntity.getPersonId()).append(",")
                .append(allIdTypeValueEntity.getImageUrl()).append(",")
                .append(allIdTypeValueEntity.getBkgUrl()).append(",")
                .append(allIdTypeValueEntity.getIdType());
            return sb.toString();
        }

    这样执行入库pg或者pg的时候,入库效率应该就是直线上升的,具体的效率量化值,还希望有大佬给出....嘻嘻嘻.....

     

     

    展开全文
  • Java对excel表格操作

    千次阅读 2018-01-03 10:42:41
    一、介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求...目前,比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel下面我就分别讲解一下如何使用这两个技术实现
  • java使用mongodb API操作MongoDB

    千次阅读 2018-01-15 14:44:25
    下面主要讲述JAVA如何调用MongoDB的API接口操作数据库MongoDB是当今非常流行的一款NoSQL数据库,本文介绍如何使用MongoDB的Java驱动来操作MongoDB。  一、引入MongoDB Java Driver包 如果需要操作MongoDB的...
  • Java输入输出流和文件操作

    千次阅读 2015-06-23 14:46:45
    文件和流操作系统中的文件和目录概念文件与文件系统文件是信息的一种组织形式,是存储在外部存储介质上的具有标志名的一组相关信息集合。 文件系统用文件概念来组织和管理存放在各种介质上的信息。文件系统提供目录...
  • 牛逼!Java 从入门到精通,超全汇总版

    万次阅读 多人点赞 2021-05-06 19:40:33
    文章目录Java 基础Head First JavaJava 核心技术卷一Java 编程思想设计模式Head First 设计模式图解设计模式设计模式重学 Java 设计模式Java 进阶Java 并发编程实战Java 并发编程艺术Java 并发编程之美图解Java多...
  • Java代码实现列队基本操作

    千次阅读 2015-11-15 13:11:24
    Java实现列队基本操作 队列的定义: 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。 (1)允许删除的一端称为队头(Front)。 (2)允许插入的一端称为队尾(Rear...
  • java操作excel杂谈及jxls初体验

    千次阅读 2009-02-23 16:59:00
    鉴于windows操作系统及office办公平台,在个人桌面上的垄断地位,使得excel/word/ppt等文件被广泛应用。通过java读写excel文档是编程开发中常见问题,比如在swing和web... 2、Java Excel API(简称jexcelapijxl
  • 1、java中^代表亦或(相同为0,不同为1) 2、使用下标直接访问字符串中字符的方法 string.charAt() 3、从主方法派出异常给jvm时 使用的是 throws 而不是 throw 4、使用InputStreamReader 、...
  • Java虚拟机(JVM)你只要看这一篇就够了!

    万次阅读 多人点赞 2018-08-14 12:55:02
    1. Java 内存区域与内存溢出异常 1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是...
  • 这里先说Java中使用Jedis操作Redis,稍后会整理Redis快速入门来详细介绍Redis(跟着项目走会更容易理解)。  Java连接Redis:  在Java程序中使用Redis之前,我们需要先确保在机器上安装了Redis服务及Java Redis...
  • Java8 Stream横空出世,让我们从繁琐冗长的迭代中解脱出来,集合数据操作变得优雅简洁。 这些操作:集合的filter(筛选)、归约(reduce)、映射(map)、收集(collect)、统计(max、min、avg)等等,一行代码即可...
  • java boolean的|=&=^=写法

    千次阅读 2015-10-16 09:25:56
    /** * 有时候看一看开源框架可以学到很多有用的... * 逻辑操作符的操作对象和结果均为boolean型,共六个: * !(逻辑非) && (逻辑与) ||(逻辑) * ^(逻辑并) & (逻辑与) | (逻辑) * 按位与'&
  • 原文地址:http://www.devx.com/enterprise/Article/43086/0/page/1利用Web Services 将 .NET 和 Java 技术融合很容易,但对于许多任务来说,Web Services 并不是Java / .NET互操作性的解决方案。Web services 对于...
  • java+mysql数据库操作与web读取测试

    千次阅读 2012-07-08 14:51:29
    最近决定做个东西,B/S结构,...out.print("数据库操作成功,恭喜你"); rs.close(); statement.close(); connection.close(); %>   4 结果   下一步是在B端写入数据存储到mysql上,待续!
  • JAVA框架

    千次阅读 2019-10-15 10:42:43
    JAVA框架SpringSpringMVCSpringBootDubboMavenRedisMybatis Spring SpringMVC SpringBoot Dubbo Maven Redis Mybatis
  • java NIO 详解

    千次阅读 2018-08-27 14:43:29
    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代...Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作...
  • Java NIO 系列教程

    千次阅读 2017-02-07 23:08:51
    Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道
  • 取余操作亦是如此。 2.java在7.0之后switch语句case后面支持String类型。 3.java嵌套循环中内部循环使用break或者continue来控制,外部循环结束或者跳过可以使用标签,示例代码: out: for (int i = 0; i < 10; i+...
  • 点击打开链接http://www.jb51.net/article/88300.htm ... import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static fi...
  • 重温java基础

    千次阅读 多人点赞 2015-08-27 11:26:10
    Java,编译型语言,解释型语言? 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。 把高级语言翻译成机器语言的两种方式:一种是...
  • Java9发布回顾Java 8的十大新特性

    千次阅读 2017-09-26 10:11:21
    java9已经在北京时间9月22日正式发布,开发者可以在oracle jdk官网上下载到最新的jdk9。 今天,我们先来一起复习一下2014年发布的Java 8的十大新特性。先来喝杯java~~~ 按照java升级的传统,偶数版的(468)改动较...
  • Java Socket编程基础

    千次阅读 2014-02-26 17:34:30
    Java Socket编程时对于TCP/IP 协议层的通信进行封装,简化了相关的一些操作。           一个简单的实例: 服务器端代码: package com.lou.socket; import java.io.BufferedReader; import java.io....
  • Java Mission Control-Java 性能分析工具

    千次阅读 2018-08-28 18:50:09
    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java ...第一篇:操作系统工具,第二篇:Java 内置监控工具。 JMC 是在 JAVA 7u40 发布中加入的性能监控工具。使用过 JDK 6 中 JRockit JVM 的...
  • java面试题

    千次阅读 2018-11-25 00:36:29
    java源代码(.java)被编译器编译成字节码(.class)文件,然后字节码文件被Java虚拟机解释成机器码(不同平台的机器码不一样),最后利用机器码操作硬件和操作系统。 因为不同的平台装有不同的java虚拟机,它能够将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,259
精华内容 16,503
关键字:

java亦或操作

java 订阅