当前位置: 首页 > news >正文

文件相对路径与绝对路径

前言:

在写代码绘制图像的过程中,发现出现can't read input file的异常,而且输出框没有绘制图片,所以寻找解决方案。先贴上之前写的简洁版绘制图像代码

1.BackGround类

import java.awt.image.BufferedImage;public class BackGround {private BufferedImage bgImage=null;private int sort;private boolean flag;public BackGround(){}public BackGround(int sort,boolean flag) {this.sort = sort;this.flag = flag;bgImage = StaticValue.bg;}public BufferedImage getBgImage() {return bgImage;}public int getSort() {return sort;}public boolean isFlag() {return flag;}}

2.MyFrame类


import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;public class MyFrame extends JFrame implements KeyListener {private BackGround nowBg = new BackGround();private Image offScreenImage = null;public MyFrame() throws IOException {//设置窗口的大小为800 * 600this.setSize(800,600);//设置窗口居中显示this.setLocationRelativeTo(null);//设置窗口的可见性this.setVisible(true);//设置点击窗口上的关闭键,结束程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口大小不可变this.setResizable(false);//向窗口对象添加键盘监听器this.addKeyListener(this);//设置窗口名称this.setTitle("超级玛丽");
/*String userDir = System.getProperty("user.dir");System.out.println("当前工作目录: " + userDir);*/StaticValue.init();nowBg=new BackGround(1,true);repaint();}public void paint(Graphics g){if (offScreenImage == null) {offScreenImage = createImage(800,600);}Graphics graphics = offScreenImage.getGraphics();graphics.fillRect(0,0,800,600);//绘制背景graphics.drawImage(nowBg.getBgImage(),0,0,this);//将图像绘制到窗口中g.drawImage(offScreenImage,0,0,this);}public static void main(String[] args) throws IOException {MyFrame myFrame = new MyFrame();}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {}@Overridepublic void keyReleased(KeyEvent e) {}}

3.StaticValue类

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class StaticValue {public static BufferedImage bg=null;public static String path=System.getProperty("user.dir")+"/src/bg.png";//public static String path=System.getProperty("user.dir")+"/src/";//public static String path="D:/BaiduNetdiskDownload/test/src/";//这里一定要用绝对路径   "/test/src/bg.png";public static void init()  {try {bg= ImageIO.read(new File(path+"bg.png"));} catch (IOException e) {e.printStackTrace();}}}

4.文件组织情况如下图,其中图片png文件直接拖到src包那里就可以自动创建了。

如果先按照源代码错误的路径寻找,会出现无法读取图片资源的错误

解决:

经过查阅资料,我了解到:

1.System.getProperty("user.dir") 是 Java 中用于获取当前用户工作目录的一个方法。这个方法返回一个字符串,表示当前 Java 程序运行时的工作目录路径。我的代码出现问题的逻辑是没有处理好文件的绝对路径,代码这里System.getProperty("user.dir")+"/src/bg.png"的形式(注意只是形式,但是实际上这个代码的路径不正确)是采用工作路径加上绝对路径来读取读取到的应该是路径而不应该是具体的文件名??

但是!改成这样就正确了:

public static String path="./src/";//相对路径,对public static String path=System.getProperty("user.dir")+"/src/";//绝对路径,对

疑惑:

1.但是这些代码是错误的路径:为什么!!!!!

 public static String path="/bg.png/";public static String path=System.getProperty("user.dir")+"/src/bg.png";public static String path="D:/BaiduNetdiskDownload/test/src/bg.png";

附上检查文件工作目录的方法:

 String userDir = System.getProperty("user.dir");System.out.println("当前工作目录: " + userDir);

2.输出是乱码形式怎么解决

已经改成utf8还是乱码

解决:

1.关于字符编码乱码,可能是因为jdk版本过高,使用的是gbk编码,只需手动把utf8改成gbk就可以了。更多修改方式如下面的连接(转载)

https://blog.csdn.net/JasonXu94/article/details/132871422

2.错误路径:

其实,IDEA中可以直接打开所在的文件路径

错因解析:注意,在ImageIO.read中,已经使用了path+bg.png,所以文件路径不需要再写bg.png这个文件名了,写了会造成重复,才会失败

或者改成这样:

心得:

从一个偶然的错误:忽略了ImageIO.read已经加上了文件名(为了省略加载多张图片要重复写路径中相同的部分,把path集成为文件名中相同的部分,这样加载不同图片只需加上不同的文件名即可),在解决问题的过程中我学习了文件的相对路径和绝对路径,顺便了解了编码乱码怎么解决,收获颇丰。

http://www.lryc.cn/news/471353.html

相关文章:

  • Linux 重启命令全解析:深入理解与应用指南
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》-第六十七章 Trusted Firmware-A 移植
  • `a = a + b` 与 `a += b` 的区别
  • mysqld.log文件过大,清理后不改变所属用户
  • v4.7+版本用户充值在交易统计中计算双倍的问题修复
  • [GXYCTF 2019]Ping Ping Ping 题解(多种解题方式)
  • MODSI EVI 数据的时间序列拟合一阶谐波模型
  • Java:String类(超详解!)
  • 【日志】力扣13.罗马数字转整数 || 解决泛型单例热加载失败问题
  • Mybatis高级
  • 【spark】spark structrued streaming读写kafka 使用kerberos认证
  • 【脚本】B站视频AB复读
  • leetcode - 257. 二叉树的所有路径
  • python 相关
  • 静态分析2:控制流分析(构建CFG)
  • Linux 应用领域
  • FPM383C指纹模块超详解 附驱动
  • 若依框架篇-若依集成 X-File-Storage 框架(实现图片上传阿里云 OSS 服务器)、EasyExcel 框架(实现 Excel 数据批量导入功能)
  • .rmallox勒索病毒肆虐:如何有效防范与应对
  • 人工智能能否影响未来生活:一场深刻的社会与技术变革
  • cmu 15-445学习笔记-3 存储引擎
  • [linux]和windows间传输命令scp 执行WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!错误解决
  • C++ | Leetcode C++题解之第518题零钱兑换II
  • 高并发-负载均衡
  • Docker 常用命令全解析:提升对雷池社区版的使用经验
  • 基于 Postman 和 Elasticsearch 测试乐观锁的操作流程
  • 如何从PPT中导出600dpi的高清图
  • day01-ElasticStack+Kibana
  • HTML 约束验证
  • vue3项目开发一些必备的内容,该安装安装,该创建创建