Java程序员的日常
工作当中遇到的事情比较杂,因此涉及的知识点也很多。这里暂且记录一下,今天遇到的知识点,纯干货~
关于文件的解压和压缩
如果你的系统不支持tar -z命令
如果是古老的Unix系统,可能并不认识tar -z命令,因此如果你想要压缩或者解压tar.gz的文件,就需要使用gzip或者gunzip以及tar命令了。
关于tar.gz可以这么理解,tar结尾的压缩包,其实只负责把文件打包,并没有进行压缩;而gz结尾的包,则是进行压缩操作。
因此,tar.gz的文件可以理解为,先进行打包,再进行压缩。
那么,压缩的命令就可以这样写:
tar -cvf abc.tar abcgzip -c abc.tar > abc.tar.gz
最终就会得出一个abc.tar.gz的文件。同理如果想要进行解压,可以这样:
gunzip abc.tar.gz =>该命令会首先得出一个abc.tar的文件 tar -xvf abc.tar =>该命令完成解压的步骤
执行完这两个命令,当前文件夹就会出现一个abc的文件夹了。
如果你的系统支持tar -z命令
如果你的系统级别高一点,就不用这么费事了,tar命令直接可以对gz进行操作:
tar -zxvf 压缩文件名.tar.gz =>这个命令可以直接完成对压缩文件的解压 tar -zcvf 压缩文件名.tar.gz 被压缩文件名 =>这个命令可以直接完成对tar.gz的压缩
文件句柄占用导致应用崩溃
在Java中如果执行过多的流操作
或者开启过多未关闭的Socket
,并且没有及时的关闭,就可能会出现too many open files
的错误。这就是因为系统的文件句柄数不够了....
在linux中可以使用命令查看文件句柄数:
ulimit -n
也可以使用这个命令,进行修改:
ulimit -n 2048
但是修改这里,是暂时的解决办法,如果长时间不释放文件句柄,仍然会报错。
所以还是应该回到程序中,检查流操作:
BufferedReader in = null;try{in = new BufferedReader(new FileReader(file));//你的业务逻辑 }catch(Exception e){ }finally{if(in != null){try{in.close();//及时的进行释放 }catch(Exception e){ } } }
如果是一些可以复用的流,还可以把它提取出来多次使用。
Linux系统下的乱码问题
乱码问题经常困扰着程序员的日常开发,关于编码的问题就不详细说了。有一个经常遇到的问题就是,我们开发好的一个应用,放在Linux下就会出现乱码,仔细检查每个编码的配置,都是utf-8,简直是百思不得其解。
其实这是JVM的问题,因为JVM默认会按照系统的编码来执行,如果JVM的编码不对,内部进行的文件处理当然也就会出现乱码。
首先查看系统的默认编码:
# localeLANG=LC_CTYPE="C"LC_COLLATE="C"LC_MONETARY="C"LC_NUMERIC="C"LC_TIME="C"LC_MESSAGES="C"LC_ALL=
很多系统的编码都是这个C
,在这边博客中说,C是系统默认的Locale,默认由ANSI C来支持。也就是说默认的编码是ANSI C!
这样,它与我们的UTF-8肯定是不一致了。因此,可以这样:
java -Dfile.encoding=UTF-8 xxxx
通过添加上面的参数来指定JVM使用的编码。如果你是在tomcat中启动的可以修改其中的java相关的参数;如果是其他的程序,那么就依启动时的jvm参数为准,修改对应的启动命令即可。
使用javac以及java执行class
这个算是基础知识了,但是一般的开发者可能只是用它试验过helloworld。比如:
javac HelloWorld.java =>编译出HelloWorld.class java HelloWorld =>执行该类
实际情况中可能远比这个复杂:
如何启动eclipse中编译出来的jar包
通过Eclipse进行打包,比较简单:
右键工程名字-Export
选择Jar File
选择指定的工程、以及编译出的jar包所在的目录
点击finish进行打包即可
这个时候,如果你直接执行java -jar xxx.jar,可能会抛出一个异常:
java -jar target.jarfileMonitor.jar中没有主清单属性
这是因为这个jar中缺少了Main方法的定义。此时你可以这么做,通过解压工具进入到jar包中,修改META-INF下的MENIFEST.MF文件。
Manifest-Version: 1.0Main-Class: com.test.类名
注意Main-Class后面的冒号后面要有空格、并且最后一行要空着(如果没有最后一行的的回车,就会报找不到Main-Class这个属性的错误)。
如果你使用Javac以及java编译类
如果你有一个类,这个类依赖于其他的jar包,比如:test.java依赖a.jar、b.jar。
那么可以执行javac进行编译:
javac -cp a.jar;b.jar test.java =>注意如果是Linux,分号要换成冒号 javac -cp a.jar:b.jar test.java
然后使用java执行:
java -cp .;a.jar;b.jar test =>如果是linux,分号换成冒号 java -cp .:a.jar:b.jar test
编写shell脚本
经常有人会编写一些类似tomcat一键启动的脚本,这里以linux为例:
#!/bin/sh PRG="$0" PRGDIR=`dirname "$PRG"` [ -z "$ROOT_PATH" ] && ROOT_PATH=`cd "$PRGDIR/.." >/dev/null; pwd`echo "设置 ROOT_PATH为 $ROOT_PATH" [ -z "$JRE_HOME" ] && JRE_HOME=`cd "$ROOT_PATH/jre" >/dev/null; pwd`echo "设置 JRE_HOME 为 $JRE_HOME""$JRE_HOME"/bin/java -Dfile.encoding=UTF-8 -jar "$AGENT_PATH"/lib/test.jar
有几个可以值得借鉴的地方:
-
第一点,就是如何设置环境变量,比如使用内置的jre
PRG="$0" PRGDIR=`dirname "$PRG"` 这两句话是为了获取启动脚本所在的目录。 [ -z "$ROOT_PATH" ] && ROOT_PATH=`cd "$PRGDIR/.." >/dev/null; pwd` 这句话是设置了该启动脚本所处的应用的根目录 [ -z "$JRE_HOME" ] && JRE_HOME=`cd "$ROOT_PATH/lib/jre" >/dev/null; pwd` 这句话是最终设置环境变量的命令。粗俗JRE_HOME就指定为应用内置的jre了。
Salin selepas log masuk -
第二点,是如何启动我们自己的类
"$JRE_HOME"/bin/java -Dfile.encoding=UTF-8 -jar "$AGENT_PATH"/lib/test.jar
Salin selepas log masuk上面这命令,是执行内置的jre中的java命令,使用java命令启动了一个可执行的jar包,并且设置好了它的编码。
Atas ialah kandungan terperinci Java程序员的日常. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.
