编程小知识点范例-1

简介:
【注】
[1]windows设置环境变量,例如设置jdk为1.7.0版本(一定要把%path%加上):
set path="D:\ProgramFiles\Java\jdk1.7.0\bin";%path%
[2]指定编译、执行的地址
编译:javac  -sourcepath  victoria.demoes -d victoria.demoes victoria.demoes\Hello.java 
执行:java  -cp victoria.demoes com/alibaba/demo/Hello
 
1、流失时间标准写法
 
  • long startTime = System.currentTimeMillis(); 
  • //....... 
  • if (logger.isInfoEnabled()) { 
  •                 long elapsedTime = System.currentTimeMillis() - startTime; 
  •                 logger.info("Root WebApplicationContext: initialization completed in " + elapsedTime + " ms"); 
  •             } 
 
【注】(1)参考自spring的org.springframework.web\src\main\java\org\springframework\web\context\ContextLoader.java
(2)其中, WebApplicationContext代表整个方法的返回类型
 
 
2、BeanUtils使用
类:Student
String name;int age; boolean sex;Address addr;添加get和set方法
________________________________
Student student = new Student();
BeanUtils.setProperties(student,"name","zhangsan");
BeanUtils.setProperties(student,"age","20");
BeanUtils.setProperties(student,"sex",true);
BeanUtils.setProperties(student,"addr.code","123456");
 
 
System.out.println(student);
System.out.println(BeanUtils.getProperties(student,"name");
System.out.println(BeanUtils.getProperties(student,"age");
System.out.println(BeanUtils.getProperties(student,"sex");
System.out.println(BeanUtils.getProperties(student,"addr.code");
 
3、获取当前文件的绝对路径
System.out.println(System.getProperty("user.dir"));
运行结果:D:\codes\sourcecodes\panama\panama.citest,得到工程的根目录
 
 
 
  1. File directory = new File("");//设定为当前文件夹 
  2.        try
  3.            System.out.println(directory.getCanonicalPath());//获取标准的路径 
  4.            System.out.println(directory.getAbsolutePath());//获取绝对路径 
  5.        }catch(Exception e){} 
 运行结果:
D:\codes\sourcecodes\panama\panama.citest
D:\codes\sourcecodes\panama\panama.citest
 
4、获取路径的方法
如何获得当前文件路径
常用:
(1).Test.class.getResource("")
得到的是当前类FileTest.class文件的URI目录。不包括自己!
(2).Test.class.getResource("/")
得到的是当前的classpath的绝对URI路径。
(3).Thread.currentThread().getContextClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI路径。
(4).Test.class.getClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI路径。
(5).ClassLoader.getSystemResource("")
得到的也是当前ClassPath的绝对URI路径。
尽量不要使用相对于System.getProperty("user.dir")当前用户目录的相对路径,后面可以看出得出结果五花八门。
(6) new File("").getAbsolutePath()也可用。
 
5、运行时指定jvm参数
java -Xms10m -Xmx10m -Xmn5m  com.alibaba.memory.TestGC
 
6、取得java文件的路径
 
  1. private static File getFileAbsolutePath(String filename) { 
  2.       String basePath = new File("").getAbsolutePath(); 
  3.       String filePath = "src/test/java"
  4.       String packagePath = "com/alibaba/panama/qdox"
  5.       return new File(basePath, File.separator + filePath + File.separator + packagePath 
  6.               + File.separator + filename); 
  7.   } 
 7、文件路径切割
String filename="d:\\upload\\133.jpg";
String name[] = filename.split("\\\\");/
应该这样才对,本身\只是一个转义符,当要用做字符是需要\\,所以如果只有一个\就出错了哦
8、隐藏文件处理
 
  1. /** 
  2.      * 取得某目录下面的文件,增加过滤功能,例如:去掉.svn隐藏文件 
  3.      *  
  4.      * @param dir 
  5.      * @return 
  6.      */ 
  7.     public static List<File> getSubFiles(File dir, String filter) { 
  8.  
  9.         if (dir == null || "".equals(dir)) 
  10.             return null
  11.         CopyOnWriteArrayList<File> subFiles = new CopyOnWriteArrayList<File>(); 
  12.         for (File file : getAllSubFiles(dir)) { 
  13.             subFiles.add(file); 
  14.         } 
  15.         for (File file : subFiles) { 
  16.             String tmp = file.toString(); 
  17.             String[] subBlocks = tmp.split("\\\\"); 
  18.             for (String subBlock : subBlocks) { 
  19.                 if (subBlock.startsWith(filter)) { 
  20.                     subFiles.remove(file); 
  21.                     break
  22.                 } 
  23.             } 
  24.         } 
  25.         return subFiles; 
  26.     } 
  27.  
  28.     /** 
  29.      * 取得目录下面的所有文件,包含隐藏文件 
  30.      *  
  31.      * @param dir 
  32.      * @return 
  33.      */ 
  34.     public static List<File> getAllSubFiles(File dir) { 
  35.         if (dir == null || "".equals(dir)) 
  36.             return null
  37.         if (dir.isDirectory()) { 
  38.             File[] subFiles = dir.listFiles(); 
  39.             for (File file : subFiles) { 
  40.                 if (file.isDirectory()) { 
  41.  
  42.                     getAllSubFiles(new File(dir + File.separator + file.getName())); 
  43.                 } else { 
  44.                     allSubFiles.add(file); 
  45.                 } 
  46.             } 
  47.         } else { 
  48.             allSubFiles.add(dir); 
  49.         } 
  50.         return allSubFiles; 
  51.     } 
 
9、Java执行中设置环境变量
环境变量设置方式一般有3种:
方式1:我的电脑-》属性-》高级-》环境变量中找到classpath
方式2:命令行执行:set classpath=.;d:\myapp\mylib
方式3: java -cp .;d:\mypro\mylib MyClassLoader
【注意】-cp或-classpath均可,具体可查看java命令查看常用参数的使用。
 -cp <class search path of directories and zip/jar files>
 -classpath <class search path of directories and zip/jar files>
               A ; separated list of directories, JAR archives,
               and ZIP archives to search for class files.
 
10、加载器的加载内容
bootstrap加载器:加载java核心库中的内容,例如java.lang.*
extended加载器:加载ext目录下面的内容
app加载器:加载classpath下面的内容, 一般包含"."表示当前目录
自定义加载器:加载自己制定目录下面的内容
 
 
 11、文件名过滤
过滤掉工程目录下以文件名以“.”开头的文件,留下不是以'.'开头的文件或文件夹
 
 
  1. File file = new File(System.getProperty("user.dir")); 
  2.  
  3.         FilenameFilter filter = new FilenameFilter() { 
  4.  
  5.             @Override 
  6.             public boolean accept(File dir, String name) { 
  7.                 return !name.startsWith("."); 
  8.             } 
  9.         }; 
  10.  
  11.         for (String filename : file.list(filter)) { 
  12.             System.out.println(filename); 
  13.         } 
12、流
FileInputStreamFileOutputStream

    节点流,用于从文件中读取或往文件中写入字节流。如果在构造FileOutputStream时,文件已经存在,则覆盖这个文件。针对字节(byte)进行操作,常用的方式为:

读入:【注意】将new String(b,off,len)将字节数组转换为字符串

 
  1. FileInputStream fis = new FileInputStream("1.txt"); 
  2.         byte[] b = new byte[100]; 
  3.         int len = fis.read(b); 
  4.         System.out.println(new String(b,0, len)); 
  5.         fis.close(); 
写出:【注意】 String.getBytes()的使用将字符串转换为字节数组
 
  1. FileOutputStream fos = new FileOutputStream("1.txt"); 
  2.     fos.write("hello alibaba".getBytes()); 
  3.     fos.close(); 
BufferedInputStreamBufferedOutputStream

    过滤流,需要使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率。没有增加额外的读写功能。

DataInputStreamDataOutputStream

      过滤流,需要使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。增强了八种基本类型的读写,读取的时候需要知道写入时的顺序,否则读取的内容出错。

PipedInputStreamPipedOutputStream
    管道流,用于线程间的通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。 
 
 
  1. import java.io.*; 
  2. class PipedStreamTest 
  3.     public static void main(String[] args) 
  4.     { 
  5.         PipedOutputStream pos=new PipedOutputStream(); 
  6.         PipedInputStream pis=new PipedInputStream(); 
  7.         try 
  8.         { 
  9.             pos.connect(pis); 
  10.             new Producer(pos).start(); 
  11.             new Consumer(pis).start(); 
  12.         } 
  13.         catch(Exception e) 
  14.         { 
  15.             e.printStackTrace(); 
  16.         } 
  17.          
  18.     } 
  19.  
  20. class Producer extends Thread 
  21.     private PipedOutputStream pos; 
  22.     public Producer(PipedOutputStream pos) 
  23.     { 
  24.         this.pos=pos; 
  25.     } 
  26.     public void run() 
  27.     { 
  28.         try 
  29.         { 
  30.             pos.write("Hello,welcome you!".getBytes()); 
  31.             pos.close(); 
  32.         } 
  33.         catch(Exception e) 
  34.         { 
  35.             e.printStackTrace(); 
  36.         } 
  37.     } 
  38.  
  39. class Consumer extends Thread 
  40.     private PipedInputStream pis; 
  41.     public Consumer(PipedInputStream pis) 
  42.     { 
  43.         this.pis=pis; 
  44.     } 
  45.     public void run() 
  46.     { 
  47.         try 
  48.         { 
  49.             byte[] buf=new byte[100]; 
  50.             int len=pis.read(buf); 
  51.             System.out.println(new String(buf,0,len)); 
  52.             pis.close(); 
  53.         } 
  54.         catch(Exception e) 
  55.         { 
  56.             e.printStackTrace(); 
  57.         } 
  58.     } 
 
13、字节流、字符流的转换
 
  1. FileOutputStream fos = new FileOutputStream("1.txt"); 
  2.         OutputStreamWriter osw = new OutputStreamWriter(fos); 
  3.         BufferedWriter bw = new BufferedWriter(osw); 
  4.         bw.write("hi, alibaba"); 
  5.         bw.close(); 
  6.          
  7.         FileInputStream fis = new FileInputStream("1.txt"); 
  8.         InputStreamReader isr = new InputStreamReader(fis); 
  9.         BufferedReader br = new BufferedReader(isr); 
  10.         String line = br.readLine(); 
  11.         System.out.println(line); 
14、FileLock
 
  1. String filename = Sample01.class.getResource("/demo.txt").getFile(); 
  2.         FileOutputStream outputStream = new FileOutputStream(filename); 
  3.  
  4.         FileChannel channel = outputStream.getChannel(); 
  5.         FileLock fileLock = channel.tryLock(); 
  6.         if (fileLock != null) { 
  7.             Thread.sleep(20000); 
  8.             System.out.println("file lock release"); 
  9.         } 
  10.         if (fileLock != null) { 
  11.             fileLock.release(); 
  12.         } 
  13.         channel.close(); 
  14.         outputStream.close(); 
【注意】 FileLock不能对只读Channel上锁。

将 FileInputStream fis = new FileInputStream(file);改为RandomAccessFile raf = new RandomAccessFile(file, "rw");
但是RandomAccessFile速度比BufferedReader要慢非常多,测试的时候是100倍的速度差距
从RandomAccessFile获得通道就可以了。

 
 本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/591809,如需转载请自行联系原作者
相关文章
|
算法 程序员 C++
C++语言学习知识点总结
C++语言学习知识点总结
84 0
|
12天前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
5月前
|
物联网 程序员 API
程序员必知:WndPric的使用方法
程序员必知:WndPric的使用方法
30 0
|
6月前
|
设计模式 算法 Java
|
设计模式 C#
C#—代码理解知识点(二)
上回介绍了关于第一章所设计的那些知识点,这次介绍一下第二章所涉及到的代码,以及由代码折射出的知识点!
C#—代码理解知识点(一)
有上面的代码之后就不得不上传上上面这个图片了,这是我们刚开始学习C#接触的第一个程序,虽然只是一个简单的输出“Hello World"程序,却带给我了我们这么多的知识以及如此规范的模版!
|
Unix 编译器 程序员
如何写出高质量的代码 -- 给所有编程学习者的一个建议
如何写出高质量的代码 -- 给所有编程学习者的一个建议
169 0
如何写出高质量的代码 -- 给所有编程学习者的一个建议
|
Java DataX iOS开发
熟练运用数组,看这篇就够了 | 带你学《Java面向对象编程》之十七
本节先通过几组案例与内存分析带读者了解数组在方法中传递时的内存变化,再通过求最值、均值的简单算法带读者熟悉数组的运用。
下一篇
无影云桌面