java获取文件时候报FileNotFoundException异常,求大神帮忙看看
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java获取文件时候报FileNotFoundException异常,求大神帮忙看看相关的知识,希望对你有一定的参考价值。
我的文件位置是在src下:
但是报如下错误:
java.io.FileNotFoundException: C:\Users\Administrator\Workspaces\MyEclipse%2010\Tenlent\bin\person.xml (系统找不到指定的路径。)
//加载本地xml文件资源
String xml=Test.class.getClassLoader().getResource("person.xml").getFile();
路径是对的
追答String xml=Test.class.getClassLoader().getResource("person.xml").getFile();
检查这行代码getFile拿到的应该是一个File对象吧 ?
你的文件目录有空格。这个路径名中C:\\Users\\Administrator\\Workspaces\\MyEclipse%2010\\Tenlent\\bin\\person.xml
ClassLoader的getResource方法获取的是URL对象,再用URL的getFile方法获取路径时就会出现这种情况。其中"%20"表示空格,路径不对导致FileNotFoundException。你可以看一下,路径中实际是一个叫"MyEclipse 10"的文件夹,但系统去找"MyEclipse%2010"这个文件夹了,这会导致获取不到文件。
解决方法:用getFile方法获取路径名后,把"%20"全部替换为" "即可。
代码:
URL rs = Test.class.getClassLoader().getResource("person.xml");String xml = rs.getFile();
xml = xml.replaceAll("%20", " ");
Java代码实现FTP单个文件下载
一:下载commons-net-1.4.1.jar包,放到lib下,并加载到.classpath文件中
二:编写工具类FtpUtil.Java如下
- package common;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.net.SocketException;
- import java.util.Properties;
- import org.apache.log4j.Logger;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.apache.commons.net.ftp.*;
- public class FtpUtil {
- private final static Log logger = LogFactory.getLog(FtpUtil.class);
- /**
- * 获取FTPClient对象
- *
- * @param ftpHost
- * FTP主机服务器
- * @param ftpPassword
- * FTP 登录密码
- * @param ftpUserName
- * FTP登录用户名
- * @param ftpPort
- * FTP端口 默认为21
- * @return
- */
- public static FTPClient getFTPClient(String ftpHost, String ftpUserName,
- String ftpPassword, int ftpPort) {
- FTPClient ftpClient = new FTPClient();
- try {
- ftpClient = new FTPClient();
- ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
- ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
- if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
- logger.info("未连接到FTP,用户名或密码错误。");
- ftpClient.disconnect();
- } else {
- logger.info("FTP连接成功。");
- }
- } catch (SocketException e) {
- e.printStackTrace();
- logger.info("FTP的IP地址可能错误,请正确配置。");
- } catch (IOException e) {
- e.printStackTrace();
- logger.info("FTP的端口错误,请正确配置。");
- }
- return ftpClient;
- }
- /*
- * 从FTP服务器下载文件
- *
- * @param ftpHost FTP IP地址
- *
- * @param ftpUserName FTP 用户名
- *
- * @param ftpPassword FTP用户名密码
- *
- * @param ftpPort FTP端口
- *
- * @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa
- *
- * @param localPath 下载到本地的位置 格式:H:/download
- *
- * @param fileName 文件名称
- */
- public static void downloadFtpFile(String ftpHost, String ftpUserName,
- String ftpPassword, int ftpPort, String ftpPath, String localPath,
- String fileName) {
- FTPClient ftpClient = null;
- try {
- ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
- ftpClient.setControlEncoding("UTF-8"); // 中文支持
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- ftpClient.enterLocalPassiveMode();
- ftpClient.changeWorkingDirectory(ftpPath);
- File localFile = new File(localPath + File.separatorChar + fileName);
- OutputStream os = new FileOutputStream(localFile);
- ftpClient.retrieveFile(fileName, os);
- os.close();
- ftpClient.logout();
- } catch (FileNotFoundException e) {
- logger.error("没有找到" + ftpPath + "文件");
- e.printStackTrace();
- } catch (SocketException e) {
- logger.error("连接FTP失败.");
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- logger.error("文件读取错误。");
- e.printStackTrace();
- }
- }
- }
三、测试代码
假设已经存在一个FTP服务器,登录的用户名和密码为zyf,端口为22,登后的家目录下进入ftpdir目录,下面有一个11.txt文件用于下载测试
- package scripts.testscript;
- import org.testng.annotations.Test;
- import common.FtpUtil;
- public class FtpDownloadTestScript {
- @Test
- public void run() {
- String ftpHost = "192.168.26.132";
- String ftpUserName = "zyf";
- String ftpPassword = "zyf";
- int ftpPort = 21;
- String ftpPath = "ftpdir/";
- String localPath = "H:/download";
- String fileName = "11.txt";
- FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName);
- }
- }
以上是关于java获取文件时候报FileNotFoundException异常,求大神帮忙看看的主要内容,如果未能解决你的问题,请参考以下文章
VS2017 在加载任何项目时崩溃,并出现“FileNotFoundEx: System.Runtime.CompilerServices.Unsafe, V=4.0.4.1”