java获取ip地址(详解java编程思想)
在项目中一般都会遇到文件的读写,
一般有两个问题要进行处理
1路径问题
2读写问题
路径的解决方法
路径之间的连接”//”=”\”=”/”
eg1:d盘下面file文件夹里面的1.txt
path=”d://file//1.txt”
path=”d:/file/1.txt”
path=”d:\file\1.txt”
这三种都可以
1绝对路径(坚决不推荐使用)
就是从电脑的根目录开始c盘d盘,详情参考eg1
2相对路径
java项目中默认是从项目的根目录开始的 如下图
获取到该目录下的所有文件(获取的是一个目录)
./ 获取到当前根目录
- string path=”./”;
- file f=new file(path);
- file[] files=f.listfiles();
- for(int i=0;i<files.length;i++){
- system.out.println(files[i].getname());
- }
../ 获取到根目录下的父目录 想要获取到多级的父目录只需要../ 写n个就好了(需要注意的是这种方法最大只能获取到 windows盘下面的根目录,就是最多只能获取到 c盘 或者d盘,不可能和linux 那种 /root/d)web 项目中
主要是分清楚 工作空间和发布空间就好了
比如当初使用struts2文件上传的时候
定义接受文件的目录
servletcontext servletcontext = servletactioncontext.getservletcontext();
string str=servletcontext.getrealpath(“/files/”+filefilename);
eclipse暂时出了点小问题等会再写这个
读写文件(如果不正确欢迎积极指出,一起进步)
因为文件有不同的格式,就文本文件来说有utf-8 gbk 等等
建议使用字节流 ( inputstream是所有字节输入流的祖先,而outputstream是所有字节输出流的祖先)进行读取而不是字符流( reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先)
其实就是内部一个使用byte[]实现,一个是用char[] 这个可以看一下 jdk的源码就了解了
具体 字符流字节流之间的区别请看转载处
- http://blog.csdn.net/zxman660/article/details/7875799
- http://blog.csdn.net/cynhafa/article/details/6882061
- 读写文件
- package com.wzh.utils;
- import java.io.bufferedinputstream;
- import java.io.bufferedoutputstream;
- import java.io.file;
- import java.io.fileinputstream;
- import java.io.fileoutputstream;
- import java.io.inputstream;
- import java.io.outputstream;
- public class inoutfile {
- /**
- * @param file null、一个文件、一个文件目录、
- * <pre>
- * filetobyte(null)=null
- * filetobyte(file)=null file>2g
- * filetobyte(文件目录)=null
- * filetobyte(file)=byte[]
- * </pre>
- * @return null(文件不存在,null,文件目录,文件太大>2g) byte[](转换成功)
- */
- public byte[] filetobyte(file file) {
- byte[] buffer = null;
- if (file == null) {
- throw new indexoutofboundsexception();
- }
- if (file.isdirectory())
- return buffer;
- if (file.length() > integer.max_value)
- return buffer;
- if (file.isfile()) {
- int filelength = (int) file.length();
- inputstream inputstream = null;
- bufferedinputstream bufferedinputstream = null;
- outputstream outputstream=null;
- bufferedoutputstream bufferedoutputstream=null;
- file outfile=new file(“files//out//”+file.getname());
- int n = 0;
- int off = 0;
- int length = 4096;
- try {
- if(!outfile.exists())
- outfile.createnewfile();
- inputstream = new fileinputstream(file);
- outputstream=new fileoutputstream(outfile, true);
- bufferedinputstream = new bufferedinputstream(inputstream);
- bufferedoutputstream=new bufferedoutputstream(outputstream);
- buffer = new byte[filelength];
- /*
- * 添加(length <= filelength – off) ? length : filelength – off)的比较
- * 为了防止读到最后buffer 剩余的长度没有4096 装不下那么多会导致读取不了indexoutofboundsexception()
- * 当filelength – off=0时表示文件读取完毕但是read内部认为是其他线程占用io导致堵塞并不会认为文件读取完毕
- * 所以要添加上filelength – off>0
- */
- while ((filelength – off) > 0 && (n = bufferedinputstream.read(buffer, off,
- ((length <= filelength – off) ? length : filelength – off))) >= 0) {
- bufferedoutputstream.write(buffer, off, n);
- off += n;
- }
- }
- catch (exception e) {
- }
- finally {
- closeinputstream(bufferedinputstream);
- closeinputstream(inputstream);
- closeoutputstream(bufferedoutputstream);
- closeoutputstream(outputstream);
- system.out.println(“end”);
- }
- }
- return buffer;
- }
- /**
- * close inoutstream
- * @param inputstream null or the inputstream’s child
- */
- private void closeinputstream(inputstream inputstream) {
- if (inputstream == null)
- return;
- try {
- inputstream.close();
- }
- catch (exception e) {
- }
- }
- /**
- * close outputstream
- * @param outputstream null or the outputstream child
- */
- private void closeoutputstream(outputstream outputstream) {
- if (outputstream == null)
- return;
- try {
- outputstream.flush();
- outputstream.close();
- }
- catch (exception e) {
- }
- }
- }
当然字符流也可以进行读取文件
字符流也可以进行读取文件只不过要指定文件(文本文件)的编码
- /**
- * 创建不同格式的文本文件
- * @throws exception
- */
- private void createfile() throws exception {
- file file = new file(“files//kindsformat//utf//1.txt”);
- //file file = new file(“files//kindsformat//gbk//1.txt”);
- if (!file.exists())
- file.createnewfile();
- writer writer = new outputstreamwriter(new fileoutputstream(file, true), “utf-8”);
- //writer writer = new outputstreamwriter(new fileoutputstream(file), “gbk”);
- bufferedwriter bufferedwriter = new bufferedwriter(writer);
- bufferedwriter.write(“我是中文测试啊测试啊”);
- bufferedwriter.flush();
- bufferedwriter.close();
- writer.close();
- }
有不对的地方欢迎指出,谢谢